我在托尼·加迪斯的书中一直在关注他的编程挑战,我试着做“元音和辅音程序”。程序将要求用户输入任何字符串,然后计算该字符串中的元音或辅音数。我能够编写大部分代码,但输出有问题。希望你们能帮我解决这个问题。
问题是这样的:
************************|
1-计算元音
2-计数辅音
3-退出
进入模式:1
****元音****
输入文字:abracadabra
音量:5
要再次输入吗(y/n):n
************************|
1-计算元音
2-计数辅音
3-退出
进入模式:1
(然后就在这里结束)
首先,我选择模式1来计算元音,然后如果输入任何字符串。然后,它成功地计算了元音的数量,它会问我是否想再次输入,我输入了n表示否。代码返回到选择模式,然后,我再次输入1来计算元音。这一次,它什么也没做。它只是停止了,我应该再次输入一个字符串,等等。当我选择2来计算辅音时,同样的事情也会发生。
这是我的代码:
第1部分:
package Test;
public class VowelMain {
private String words;
private int vowel = 0;
public VowelMain(String w){
words = w;
setVowel(words);
}
public void setVowel(String words){
char[]chunks = words.toCharArray();
for(int x = 0;x < chunks.length;x++){
if(chunks[x]=='a' || chunks[x]=='e' || chunks[x]=='i' || chunks[x]=='o' || chunks[x]=='u'){
vowel += 1;
}
}
}
public int getVowel(){
return vowel;
}
}
第二部分:
package Test;
public class ConsonantMain {
private String words;
private int consonant = 0;
public ConsonantMain(String w){
words = w;
setConsonant(words);
}
public void setConsonant(String words){
char[]chunks = words.toCharArray();
for(int x = 0;x < chunks.length;x++){
if(chunks[x]=='a' || chunks[x]=='e' || chunks[x]=='i' || chunks[x]=='o' || chunks[x]=='u'){
}else{
consonant += 1;
}
}
}
public int getConsonant(){
return consonant;
}
}
第三部分:
package Test;
import java.util.Scanner;
public class TestMain {
public static void main(String[]args){
int mode = getMode();
operation(mode);
}
public static void operation(int mode){
Scanner hold = new Scanner(System.in);
String words;
String response;
while(mode == 1 || mode == 2 || mode == 3){
switch(mode){
case 1:
System.out.print("****VOWELS****\n");
do{
System.out.print("Enter words:");
words = hold.nextLine();
VowelMain t = new VowelMain(words);
System.out.println("NUMBER OF VOWELS: " + t.getVowel());
System.out.print("Do you want to input again(y/n):");
response = hold.nextLine();
if(response.equalsIgnoreCase("n")){
mode = -1;
getMode();
}
}while(response.equalsIgnoreCase("y"));
break;
case 2:
System.out.print("****CONSONANTS****\n");
do{
System.out.print("Enter words:");
words = hold.nextLine();
ConsonantMain c = new ConsonantMain(words);
System.out.println("NUMBER OF CONSONANTS: " + c.getConsonant());
System.out.print("Do you want to input again(y/n):");
response = hold.nextLine();
if(response.equalsIgnoreCase("n")){
mode = -1;
getMode();
}
}while(response.equalsIgnoreCase("y"));
break;
case 3:
System.exit(0);
break;
default:
System.out.println("ERROR!");
break;
}
}
}
public static int getMode(){
Scanner hold = new Scanner(System.in);
int mode;
System.out.println("************************");
System.out.println("1 - Count Vowels");
System.out.println("2 - Count Consonants");
System.out.println("3 - Exit");
System.out.print("Enter mode:");
mode = hold.nextInt();
return mode;
}
}
每次你把
mode = -1;
getMode();
您应该将其替换为:
mode = getMode();
原因如下。正如RealSkeptic所说,getMode()
返回的是临时模式
值,而不是循环中使用的模式
值。通过将循环模式
分配给临时模式(通过返回语句),您的代码将正常工作。
当我们输入"n"
并在用户输入"n"
后调用getMode
函数时,您的函数在循环后终止。
您所要做的就是从案例2和案例3中的if语句中删除行,如下所示:
if(response.equalsIgnoreCase("n")){
mode = -1;
getMode();
}
并将其更改为,
if(response.equalsIgnoreCase("n")){
mode = getMode();
}