0
votes

Sortie incorrecte dans un petit programme. Pourquoi cette variable de chaîne ne fait-elle pas ce que je veux ça?

Ce programme devrait prendre une chaîne, vérifier si chaque lettre est une voyelle et modifier les voyelles en soulignement. Par exemple, si je saisis quelques il doit produire s_m _ . C'est un exercice de programmation simple que je ressens que je devrais pouvoir faire. Cependant, je suis véritablement percuté et je ne peux pas dire ce que je fais mal.

J'ai déclaré une matrice pour conserver les voyelles, une variable NewsTR qui contiendra la chaîne mise à jour et je suis en boucle via la chaîne, en comparant chaque lettre à l'aide de Charat () < / Code> Pour vérifier si c'est dans le VOWELLES Array. Si c'est le cas, j'ajoute _ à la chaîne mise à jour, et je garde la lettre originale si ce n'est pas le cas. La sortie finale est fausse, qu'est-ce que je fais mal? xxx


6 commentaires

On dirait que votre boucle interne ( j ) exécute un break peu importe le premier test. Donc, il ne vérifiera que un A et rien de plus.


Newstr = lettre + lettre; doit être fait une fois si la lettre ne correspond à aucune voyelle (c'est-à-dire après la boucle de la boucle)


Traversez votre code dans votre IDE est idéal pour résoudre de petits problèmes comme celui-ci.


Je pense que la meilleure idée serait d'introduire une méthode comme isvowel () qui renvoie true ou false si son paramètre de caractère est une voyelle. Cela aiderait à nettoyer le code beaucoup et à faire que si est plus facile à comprendre (et à résoudre).


Pas vraiment utile, mais vous avez oublié la voyelle 'Y'.


Il y a beaucoup de façons d'y parvenir. Pourquoi avez-vous besoin de 2 boucles? Vous avez également essayé de déboguer votre code?


3 Réponses :


-1
votes
for (int x = 0; x < str.length(); x++) {
 char letter = str.charAt(x);
 boolean toReplace = false;
 for (int j = 0; j < vowels.length; j++) {
    if (letter == vowels[j]) {
        toReplace = true;
        break;
    }
 }
 if (toReplace) {
    newStr = newStr + "_";
 } else {
    newStr = newStr + letter;
 }
}

3 commentaires

Ou simplement newstr = str.replaceall ("[aeiou]" "," _ "); mais je suppose que vous essayez de le faire comme un exercice et ne cherchez pas une solution unique: - ). Dans ce cas, je recommande vivement d'utiliser StressBuilder pour créer la nouvelle chaîne. Juste pour le bien de vos études :-). Bonne chance.


Ouais, ne peut pas être d'accord plus d'accord! En production est la meilleure idée d'utiliser StressBuilder.


Soyez des articles de la concaténation String en boucle !



0
votes

Ceci est assez simple. Juste itérer sur chaque caractère de la chaîne donnée et remplacer par _ code> en cas de voyelle.

Utilisez StringBuilder h3>

Soyez l'utilisateur d'utiliser code >. Ceci est immuable strong> en Java, donc pour construire une chaîne finale, vous devez utiliser stringbuilder code>. P> xxx pré>


utilisation Regularexpression h3>

AS alternative, vous pouvez utiliser Expression régulière em> avec remplacement () code> méthode de la chaîne code> classe p >

private static final Pattern VOWEL = Pattern.compile("[aeiou]");

public static String replaceVowel(String str) {
    return VOWEL.matcher(str).replaceAll("_");
}


0 commentaires

2
votes

Dans votre code, le problème est dans votre "boucle" imbriquée. Je dis cela entre citations parce que cela ne boucle jamais réellement. La première itération j = 0 code> casse immédiatement la boucle car votre lettre est égale à A code> avec (lettre == voyelles [0]) code> ou ne pas. Dans les deux cas, vous faites une pause ; code> et ajoute le caractère. Cela signifie que votre boucle peut être réduite à un simple si-else code> qui vérifie si la lettre est un a code> et le remplace par _ code> ou le garde .

Pour résoudre ce problème, vous devez utiliser une approche différente. Vous pouvez créer une chaîne de voyelles telles que "aeiouaeiou" et utiliser Indexof Pour vérifier si le caractère sélectionné est une voyelle. P>

public static String omitVowels(String input) {
    StringBuilder out = new StringBuilder(input.length());
    String vowels = "aeiouAEIOU";
    for (int i = 0; i < input.length(); i++) {
        char c = input.charAt(i);
        if (vowels.indexOf(c) >= 0) // is vowel if index not negative
            out.append('_');
        else
            out.append(c);
    }
    return out.toString();
}


0 commentaires