不确定为什么程序只能运行一次

问题描述 投票:0回答:1

我有一个任务要编写一个回文检查器,它可以循环回到自身并且还包含一个 quit 语句。我不确定为什么我想出的方法不起作用。它会工作一次,但随后将所有答案默认为“否”,退出语句根本不起作用。

public static void main(String[] args)
{
    Scanner stdln = new Scanner(System.in);
    String original, oposite = "";  

      System.out.printf("Please enter something to see if it is a palindrome.%nEnter \"q\" to   stop.%n");  
          original = stdln.nextLine();   
    
          
      
      
     while (original !="q")
     {
         int length = original.length();
         
      for ( int i = length - 1; i >= 0; i-- )  
         oposite = oposite + original.charAt(i);  
          
         if (original.equals(oposite))  
                 System.out.println("It is a palindrome.");  
              else  
                 System.out.println("It is not a palindrome.");
                 
        System.out.printf("Please enter a something to see if it is a palindrome.%nEnter \"quit\" to stop.%n");  
          original = stdln.nextLine();`   
                 
}

          

} }

我的想法是,如果用户输入“q”,那么进程将无法运行,因为这是 while 语句的条件。相反,它会检查 q 是否为回文。第二个问题是,一旦它运行一次,所有后续条目都会导致 else 语句。我真的不确定我错过了什么。`

java while-loop exit
1个回答
0
投票

在while循环的顶部重新设置oposite:oposite = "";否则,每次循环循环时,您都会向 String 添加越来越多的文本

此外,不要使用

==
!=
比较字符串。请改用
equals(...)
equalsIgnoreCase(...)
方法。了解
==
检查两个 object references 是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这才是最重要的在这里。

所以,

while (!original.equalsIgnoreCase("q")) {
    int length = original.length();
    
    // ****** add this ******
    oposite = "";

    for ( int i = length - 1; i >= 0; i-- )  {
        oposite = oposite + original.charAt(i);  
    }

    if (original.equals(oposite)) {
        System.out.println("It is a palindrome.");  
    } else {
        System.out.println("It is not a palindrome.");
    }
    System.out.printf("Please enter a something to see if it is a palindrome.%nEnter \"quit\" to stop.%n");  
    original = stdln.nextLine();`   
}

此外,始终在每个代码块(甚至单行代码)周围包含花括号是个好主意,以避免出现常见错误。

© www.soinside.com 2019 - 2024. All rights reserved.