我的代码在这里检查用户输入的单词是否是回文。它正确执行它只是如果用户试图通过按“1”循环它。该计划结束。我该如何解决这个问题?
int answer =0;
String original, backwards = "";
Scanner input = new Scanner(System.in);
System.out.println("A palindrome is a word that is the same forwards as it is backwards. Enter a word to check if it is a palindrome or not.");
original = input.nextLine();
int length = original.length();
do {
for ( int i = length - 1; i >= 0; i-- )
backwards = backwards + original.charAt(i);
if (original.equals(backwards))
System.out.println("The entered phrase is a palindrome.");
else
System.out.println("The entered phrase is not a palindrome.");
}
while (answer ==1);
System.out.println("If you would like to check another word press 1. If you wish to exit, press 2.");
answer = input.nextInt();
if (answer ==1){
System.out.println("Enter another word");
}
else if (answer == 2){
System.out.println("Have a nice day");
}
}
}
以下是该程序的示例输出:
回文是一个向前和向后相同的词。输入一个单词以检查它是否是回文。
赛车
输入的短语是回文。
如果要查看其他单词,请按1.如果要退出,请按2.
1
输入另一个单词
答案 0 :(得分:2)
您的循环在用户选择是否要输入1或2之前完成。它是do...while
循环,因此它以while
结束。所以它只执行一次 - 因为只要检查回文,接下来就要检查答案是否为1.但是此时用户还没有输入1或2。
因此,您应该在} while ( answer == 1 )
关闭后将if...else...
部分移动到该行,以检查用户的回答是什么。
此外,如果答案是1
,您应该要求另一个输入。您要求输入的唯一位置是在循环开始之前。如果用户回答1
,您应该再次运行original = input.nextLine();
。请注意 - 您可能需要运行两个input.nextLine()
,因为扫描程序会认为1
或2
之后的其余部分是您的意思。
答案 1 :(得分:0)
您的扫描仪要求使用nextLine,但您要求使用int。 nextLine意味着它将把nextLine中键入的内容作为字符串。
简单修复是将1和2替换为字符a和b。
复杂的方法是将字符串解析为整数。
答案 2 :(得分:0)
将回文检查作为一种方法,然后在用户输入为1的情况下调用该方法。
在您的代码中,如果用户inout等于1,则它不会执行任何操作。
我只是原样使用了您的扫描仪对象。您可以在类中声明它们以在所有方法中使用它。
public void palindrome(String S){
int answer =0;
String original, backwards = "";
Scanner input = new Scanner(System.in);
System.out.println("A palindrome is a word that is the same forwards as it is backwards. Enter a word to check if it is a palindrome or not.");
original = input.nextLine();
int length = original.length();
do {
for ( int i = length - 1; i >= 0; i-- )
backwards = backwards + original.charAt(i);
if (original.equals(backwards))
System.out.println("The entered phrase is a palindrome.");
else
System.out.println("The entered phrase is not a palindrome.");
}
while (answer ==1);
System.out.println("If you would like to check another word press 1. If you wish to exit, press 2.");
int option= input.nextInt();
if (option==1){
System.out.println("Enter another word");
String word= input.readLine();
palindrome(word);
}
答案 3 :(得分:0)
如果用户想要在while循环中输入其他作品,则需要进行检查。但与此同时,请注意将所有变量重置为原始值,因此最好将它们设置在while循环中。像这样:
import java.util.Scanner;
public class Palidrome {
public static void main(String[] args) {
int answer = 0;
Scanner input = new Scanner(System.in);
String original;
System.out
.println("A palindrome is a word that is the same forwards as it is backwards. Enter a word to check if it is a palindrome or not.");
while( true ) {
original = input.nextLine();
String backwards = "";
int length = original.length();
for (int i = length - 1; i >= 0; i--)
backwards = backwards + original.charAt(i);
if (original.equals(backwards))
System.out.println("The entered phrase " + original + " is a palindrome.");
else
System.out.println("The entered phrase " + original + " is not a palindrome.");
System.out.println("If you wish to exit, press 2");
answer = input.nextInt();
if(answer == 2) {
System.out.println("Have a nice day");
break;
}
input.nextLine();
System.out.println("Enter another word");
}
input.close();
}
}
答案 4 :(得分:0)
do while循环的工作方式与常规while
循环的工作方式相同,只是省略了第一个条件检查。如果满足while
中的条件,则将继续执行do
块中的代码。但是,从来没有遇到过这种情况,你能明白为什么吗?即使满足这个条件,也不是您接下来要执行的代码。下面的代码while
不是do-while循环的一部分。你需要在最后两个条件块之后移动。 The Java docs on while循环应该是一个有用的读物。