gpt4 book ai didi

java - 调试java中的面向对象编程代码输出

转载 作者:行者123 更新时间:2023-12-01 11:11:33 25 4
gpt4 key购买 nike

我一直在关注 Tony Gaddis 在他的书中提出的编程挑战,并且我尝试过进行“元音和辅音程序”。该程序将要求用户输入任何字符串,然后计算该字符串中元音或辅音的数量。我能够编写大部分代码,但输出存在问题。希望你们能帮我解决这个问题。

问题是这样的:

************************|

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() 返回一个临时 mode 值,而不是在您的代码中使用的 mode 值。环形。通过将循环模式分配给临时模式(通过 return 语句),您的代码将正常工作。

关于java - 调试java中的面向对象编程代码输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32296265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com