输出应该只打印一次,但是一旦找到VOWEL就无法弄清楚它是否会脱离循环。
继续提供输入' a'曾经然后在船尾#39;你会知道我真正想要的......
package com.java;
import java.util.Scanner;
public class three {
@SuppressWarnings("resource")
public static void main(String args[])
{
Scanner s = new Scanner(System.in);
System.out.println("Enter String");
String a = s.next();
char b[] = a.toCharArray();
///char c[] = {"a","e","i","o","u"};
String str = "aeiouAEIOU";
char[] c = str.toCharArray();
//char[] charArray = str.toCharArray();
if(a.matches(".*\\d+.*"))
{
System.out.println("WARNING!!!");
System.out.println("please input only string");
}
else
{
for(int i=0;i<b.length;i++)
{
for(int j=0;j<c.length;j++)
{
if(b[i]==c[j])
{
System.out.print(" VOWEL ");
}
else if(b[i]!=c[i])
{
System.out.print(" consonant ");
}
}
}
}
}
}
答案 0 :(得分:1)
问题
问题在于你的第二个for循环,你不应该从它内部打印元音或辅音。这个内部循环就是决定字符是否是元音,所以你应该在这个循环中更新一个布尔值,并根据布尔值的值在外部循环中打印出来。
代码更正
这是你的代码更正(我更改了变量名称,因此更容易理解):
public static void main(String args[]) {
String vowels = "aeiouAEIOU";
char[] vowelsArray = vowels.toCharArray();
Scanner s = new Scanner(System.in);
System.out.println("Enter String");
String inputString = s.next();
char inputStringArray[] = inputString.toCharArray();
if(inputString.matches(".*\\d+.*")) {
System.out.println("WARNING!!!");
System.out.println("please input only string");
} else {
for(int i=0;i<inputStringArray.length;i++) {
// Declare a boolean to say if the character is a Vowel or not
boolean isVowel = false;
// Check the character and set the boolean value
for(int j=0;j<vowelsArray.length;j++) {
if(inputStringArray[i]==vowelsArray[j]) {
isVowel = true;
break;
}
}
// Then do the printing here, in the input characters loop
if(isVowel) {
System.out.print(" VOWEL ");
} else if(inputStringArray[i]!=vowelsArray[i]) {
System.out.print(" consonant ");
}
}
}
有关正则表达式的说明
如果您只想接受来信,可能更喜欢这个正则表达式。
if(!inputString.matches("[a-zA-Z]+"))
您当前的正则表达式会接受hey!
另一种编码方式
这是另一种方法:
contains
对象的List
方法。 请参阅内联注释以获取解释:
public static void main(String args[]) {
// declare your vowels
List<Character> vowelsList = Arrays.asList('a', 'e', 'i', 'o', 'u', 'y');
// get the input string
Scanner s = new Scanner(System.in);
System.out.println("Enter String");
String inputString = s.next();
if(!inputString.matches("[a-zA-Z]+")) {
System.out.println("WARNING!!!");
System.out.println("please input only string");
} else {
// Transform your inputString to lower case
// (because we only have lower case in our vowels list)
String lowerCaseInputString = inputString.toLowerCase();
// Then for each character of the input string,
// check if it is in the vowels list or not
for(char c : lowerCaseInputString.toCharArray()) {
if(vowelsList.contains(c)) {
System.out.print(" VOWEL ");
} else {
System.out.print(" consonant ");
}
}
}
}
最后,一个lambda版本
如果您使用Java 8
且愿意使用lambda
,则可以用lambda替换整个else
块
...
} else {
inputString.toLowerCase().chars()
.mapToObj(c -> vowelsList.contains((char) c) ? " VOWEL " : " consonant ")
.forEach(System.out::print);
}
...