J'ai ce problème pour faire mes devoirs (je suis honnête, je n'essaye pas de le cacher au moins) Et j'ai du mal à comprendre comment le faire.
Compte tenu des déclarations suivantes: String phrase = "WazzUp? - Qui est sur FIRST ??? - IDUNNO"; Écrivez le code nécessaire pour Comptez le nombre de voyelles de la chaîne et affichez le message approprié à l'écran.
Voici le code que j'ai jusqu'à présent:
String phrase = " WazzUp ? - Who's On FIRST ??? - IDUNNO";
int i, length, vowels = 0;
String j;
length = phrase.length();
for (i = 0; i < length; i++)
{
j = phrase.substring(i, i++);
System.out.println(j);
if (j.equalsIgnoreCase("a") == true)
vowels++;
else if (j.equalsIgnoreCase("e") == true)
vowels++;
else if (j.equalsIgnoreCase("i") == true)
vowels++;
else if (j.equalsIgnoreCase("o") == true)
vowels++;
else if (j.equalsIgnoreCase("u") == true)
vowels++;
}
System.out.println("Number of vowels: " + vowels);
Cependant, lorsque je l'exécute, cela crée tout un tas de lignes vides. Quelqu'un peut-il aider?
phrase.substring(i, i++);
devrait être phrase.substring(i, i + 1);
.
i++
donne la valeur de i
et y ajoute ensuite 1. Comme vous l'avez maintenant, String j
est effectivement phrase.substring(i, i);
, qui est toujours la chaîne vide.
Vous n'avez pas besoin de changer la valeur de i
dans le corps de la boucle for
car elle est déjà incrémentée dans for (i = 0; i < length; i++)
.
Je ne vois pas la nécessité d'avoir une déclaration d'impression dans la boucle.
String s = "Whatever you want it to be.".toLowerCase();
int vowelCount = 0;
for (int i = 0, i < s.length(); ++i) {
switch(s.charAt(i)) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
vowelCount++;
break;
default:
// do nothing
}
}
Cela convertit la chaîne en minuscule et vérifie tous les caractères de la chaîne pour les voyelles.
Cela pourrait/devrait être un one-liner
System.out.println("the count of all vowels: " + (phrase.length() - phrase.replaceAll("a|e|i|o|u", "").length()));
et ses méthodes String only
Améliorer la réponse ci-dessus pour considérer les voyelles en majuscules:
System.out.println(s.length() - s.toLowerCase().replaceAll("a|e|i|o|u|", "").length());
Les incréments i ++ i après que a été utilisé, vous dites donc essentiellement string.substring (i, i). Puisque la marque de fin est exclusive, cela retournera toujours une chaîne vide. Une solution facile serait simplement de le changer en
j = phrase.substring(i, ++i);
J'espère que cela pourra aider!
Pour Compter le nombre de voyelles dans une chaîne:
class Test {
static int a;
public static String countVowel(String strName) {
char ch[] = strName.toCharArray();
for(int i=0; i<ch.length; i++) {
switch(ch[i]) {
case 'a':
a++;
break;
case 'e':
a++;
break;
case 'i':
a++;
break;
case 'o':
a++;
break;
case 'u':
a++;
break;
}
}
strName = String.valueOf(a);
return strName;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print(countVowel(s.nextLine()));
}
}
Utiliser des collections:
String Word = "busiunesuse";
char[] wordchar= Word.toCharArray();
Character allvowes[] ={'a','e','i','o','u'};
Map<Character, Integer> mymap = new HashMap();
for(Character ch: wordchar)
{
for(Character vowels : allvowes)
{
if(vowels.equals(ch))
{
if(mymap.get(ch)== null)
{
mymap.put(ch, 1);
}
else
{
int val = mymap.get(ch);
mymap.put(ch, ++val);
}
}
}
}
Set <Character> myset = mymap.keySet();
Iterator myitr = myset.iterator();
while(myitr.hasNext())
{
Character key = (Character) myitr.next();
int value = mymap.get(key);
System.out.println("Word:"+key+"repetiotions:"+value);
}
}
}
Je sais que c'est un vieux montage, Mais je pense que c'est mieux si vous utilisez un tableau pour les voyelles:
public static void main(String[] args) {
String phrase = " WazzUp ? - Who's On FIRST ??? - IDUNNO".toLowerCase();
int vowels = 0;
String[] array = {"a", "e", "i", "o", "u"};
for (int i = 0; i < phrase.length(); i++) {
String j = phrase.substring(i, i + 1);
System.out.println(j);
for (int n = 0; n < array.length; n++) {
if (j.equals(array[n])) {
vowels++;
}
}
}
System.out.println("Number of vowels: " + vowels);
}