Idk如果我这样做了..我只是想知道如何将元音一起添加到三个因为我的名字是Daniel 3总元音但是当我添加其他名字时它不起作用。
import java.util.Scanner;
public class Pratclass {
public static void main(String[] args)
{
Scanner std= new Scanner(System.in);
String string1;
System.out.println("What is your name");
string1= std.nextLine();
int count= 0;
int vowels=0;
for(String retval: string1.split(""))
{
for(int i=0; i < retval.length(); i++)
{
char c= retval.charAt(i);
if(c== 'a' || c== 'e' || c== 'i' || c== 'o'|| c== 'u')
{
vowels++;
}
else
{
count++;
}
System.out.println(retval.substring(0,1) + retval.substring(1) + vowels);
vowels=0;
}
}
int total=vowels++;
total=(total + vowels++ + vowels); < How can I count the vowels
System.out.println();
System.out.println(total);
}
}
答案 0 :(得分:1)
您正在重复循环的每次迭代重置计数器(元音)。不要每次都设置元音= 0,让你的每个元音继续增长。
一旦你完成了这项工作,你就可以删除你在其他地方添加到元音中的所有随机++,这就是你的结果总是达到3的原因。
总计=(总+元音++ +元音) - &gt; 3 = 0 + 1(然后使元音2)+ 2
int count= 0;
int vowels=0;
for(String retval: string1.split(""))
{
for(int i=0; i < retval.length(); i++)
{
char c= retval.charAt(i);
if(c== 'a' || c== 'e' || c== 'i' || c== 'o'|| c== 'u')
{
vowels++;
}
else
{
count++;
}
}
}
System.out.println("Found " + vowels + " vowel(s) among " + (vowels + count) + " character(s).");
希望有所帮助。
答案 1 :(得分:1)
试试这个:
int count=0;
int vowels=0;
boolean isVowel = false;
for(String retval: string1.split(""))
{
for(int i=0; i < retval.length(); i++)
{
char c= retval.charAt(i);
if(c== 'a' || c== 'e' || c== 'i' || c== 'o'|| c== 'u')
{
isVowel = true;
vowels++;
}
else
{
isVowel = false;
count++;
}
System.out.println(retval.substring(0,1) + retval.substring(1) + (isVowel ? 1 : 0) );
}
}
System.out.println(vowels); //prints the number of vowels in the name
您只需要boolean
来存储当前char
是否为元音。 (isVowel?1:0)在1
时返回isVowel==true
,在0
时返回isVowel==false
。这是一个三元运算符,非常方便。
另外,在表达式中使用++
时要小心......请查看以下代码片段,了解原因示例:
int total = 5;
int vowels = 2;
total = vowels++; //total = 2 and vowels = 3
如果我们写了:
int total = 5;
int vowels = 2;
total = ++vowels; //total = 3 and vowels = 3
识别var++
返回原始值(并将var
递增1),而++var
返回递增的值(并将var
递增1)
此外,count
变量在此处不执行任何操作,因此除非有更多代码实际使用它,否则您可以删除它... count
将返回非元音的数量(这包括辅音,空格,符号等)
答案 2 :(得分:1)
你也可以使用这个......
import java.util.Scanner;
public class Pratclass1 {
public static void main(String[] args) {
Scanner std= new Scanner(System.in);
String string1;
System.out.print("What is your name :");
string1= std.nextLine();
int count= 0;
int vowels=0;
char[] ar = new char[string1.length()];
for(int i = 0; i < ar.length; i++) {
ar[i] = string1.charAt(i);
if(ar[i] == 'a' || ar[i] == 'e' || ar[i] == 'i' || ar[i] == 'o'|| ar[i] == 'u') {
vowels++;
} else {
count++;
}
}
int total=vowels;
System.out.println();
System.out.println(total);
}
}
答案 3 :(得分:1)
我认为你已经找到了@Eric Lindauer答案中“计算元音”问题的答案。
但是关于“String.retval”它不是“String.retval”,而是:
for(String retval: string1.split(""))
这称为 foreach 循环,意思是:对于每个字符串(你称之为retval),在大字符串中(你输入的整个名称,你称之为string1)执行以下操作(正文for loop)。
如果您输入“Daniel”,则retval(s)将为: D然后是i,e,l。
运行代码时看到的输出是因为您使用 substring 方法。
当你说:retval.substring(0,1)
时,它意味着“给我一个从索引0到1开始的retval子串”
当你说:retval.substring(1)
时,它意味着“给我一个retval中的子串,从索引1开始到字符串结尾”
所以当retval为“D”时:retval.substring(0,1)= D. ... retval.substring(1)=没有,因为字符串长度是1 ...元音= 0/1(当它不是元音时为0,当它是......时是1,因为你在每次循环后将它设为零)
所以(retval.substring(0,1) + retval.substring(1) + vowels)
= D0
答案 4 :(得分:0)
static final String NAME_PATTERN = "^[a-zA-Z]{2,}((-|\\s)[a-zA-Z]{2,})*$"; // https://jex.im/regulex/#!embed=false&flags=&re=%5E%5Ba-zA-Z%5D%7B2%2C%7D((-%7C%5Cs)%5Ba-zA-Z%5D%7B2%2C%7D)*%24
static final String VOWELS = "aeiou";
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String name = getName(sc);
int vowelCount = getVowelCount(name);
int consonantCount = name.replace(" ", "").replace("-", "").length() - vowelCount;
System.out.printf("Vowels: %d\nConsonants: %d\n", vowelCount, consonantCount);
}
public static String getName(Scanner sc) {
System.out.print("Type your name: ");
String result = sc.nextLine();
if (result.matches(NAME_PATTERN)) {
return result;
}
System.out.println("Your input contains invalid characters. Try again please.");
return getName(sc);
}
public static int getVowelCount(String name) {
int count = 0;
for (char letter : name.toLowerCase().toCharArray()) {
if (VOWELS.indexOf(letter) >= 0) {
count++;
}
}
return count;
}