Il y a beaucoup à apprendre de votre code.
En retournant une expression booléenne
Voici une version améliorée de isVowel(char ch)
:
public boolean isVowel(char ch) {
ch = Character.toLowerCase(ch);
return (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
}
Notez deux choses ici :
-
ch
est simplifié en minuscules, ce qui réduit considérablement le nombre de contrôles.
- Il n'y a pas
if
déclaration.
Il y a une leçon importante à tirer ici : vous ne devriez jamais écrire quelque chose comme ça :
if (expression) {
return true;
} else {
return false;
}
Vous devriez toujours écrire à la place :
return expression;
C'est beaucoup, beaucoup plus clair.
Se familiariser avec la bibliothèque Java
Notez l'utilisation de Character.toLowerCase
dans le code ci-dessus. En fait, il est possible de rendre le code encore plus simple en utilisant, par exemple, les éléments suivants String.indexOf
:
public boolean isVowel(char ch) {
return "aeiouAEIOU".contains("" + ch);
}
Cela utilise String.contains
en utilisant la concaténation de chaînes de caractères pour convertir de manière efficace l'adresse de l'utilisateur. char
à un String
(qui implements CharSequence
).
Lien API
Voir aussi
Ne pas comparer avec les constantes booléennes
Les débutants ont tendance à écrire quelque chose comme ça :
if (expression1 == false) {
}
//...
if (expression2 == true) {
}
En particulier en Java, vous devriez plutôt apprendre à écrire comme ceci :
if (!expression1) {
}
//...
if (expression2) {
}
C'est beaucoup plus clair et beaucoup moins sujet aux erreurs.
Voir aussi
En itérant sur chaque caractère d'un String
Voici une boucle simple pour montrer comment la manière indexée de faire ceci :
String s = "Abracadabra";
for (int i = 0; i < s.length(); i++) {
System.out.print("[" + s.charAt(i) + "]");
} // prints "[A][b][r][a][c][a][d][a][b][r][a]"
Cela utilise le length()
y charAt(int index)
méthodes de String
.
Alternativement, si vous n'avez pas besoin de l'index, vous pouvez aussi utiliser String.toCharArray()
pour faire un foreach sur le char[]
à la place. Cette méthode n'est pas efficace en termes d'espace (le char[]
doit être nouvellement alloué pour garantir l'immuabilité), mais il est très lisible et concis :
String s = "Abracadabra";
for (char ch : s.toCharArray()) {
System.out.print("[" + ch + "]");
} // prints "[A][b][r][a][c][a][d][a][b][r][a]"
Voir aussi
Sur le processus de développement des logiciels
Comme d'autres l'ont mentionné, votre run
est très problématique : elle aboutit actuellement à une boucle infinie.
Ce que vous auriez pu faire à la place, c'est écrire ce qu'on appelle des " stubs de méthodes " pour isVowel
(par exemple, simplement return true;
) et shorthand
(par exemple, simplement return "";
). Ils ne sont pas encore corrects, mais l'important est qu'ils compilent pour le moment. Cela vous laisse le temps de vous concentrer sur run
Vous devez vous assurer que la boucle fonctionne correctement et que vous êtes en mesure d'extraire les données pertinentes de l'utilisateur. Vous devez amener le code au point où il se compile et s'exécute, de manière à pouvoir le tester et être sûr que votre run
fait ce qu'il doit faire. À ce stade, vous pouvez commencer à compléter les méthodes précédemment stubées, en implémentant les fonctionnalités appropriées selon les besoins.
Si vous avez des difficultés à y parvenir, vous pouvez poser des questions sur cet aspect particulier des devoirs (mais cherchez d'abord sur stackoverflow !). Vous obtiendrez ainsi des réponses de qualité et ciblées sur les problèmes que vous rencontrez (plutôt que de poser un code si problématique que les gens peuvent s'y perdre), ce qui est donc plus instructif pour vous.
La question est également susceptible d'être plus utile aux autres puisqu'elle s'inscrit dans un contexte plus général (c'est-à-dire qu'elle porte sur la façon d'écrire une boucle d'invite utilisateur, et non sur la façon de faire ses devoirs) (en revanche, cette question est actuellement intitulée public String shorthand(String in)
).
Une autre chose que vous pouvez faire est d'effectuer ce que l'on appelle tests unitaires . isVowel
est un GREAT candidat pour cela : pour tester son exactitude, il faudrait savoir comment l'invoquer (ce qui semble vous poser problème).
Tout cela semble être un travail inutile au début. On peut supposer que les tests unitaires ne font pas partie du devoir (bien qu'ils devraient probablement en faire partie), et écrire des stubs puis les remplacer par quelque chose d'autre semble être une perte de temps et que vous devriez plutôt faire les choses correctement du premier coup. C'est précisément parce qu'il s'agit d'un devoir à domicile que vous devez adopter et mettre en pratique les méthodologies d'un bon processus de développement logiciel. C'est pour votre propre bien.
Voir aussi