java 不确定为什么程序只能工作一次

tp5buhyn  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(177)

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

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语句。我真的不确定我错过了什么。

ogq8wdun

ogq8wdun1#

在while循环的顶部重新设置oposite:反向=“";否则,每次循环时都会向String添加越来越多的文本
另外,不要用==!=比较字符串,而要用equals(...)equalsIgnoreCase(...)方法。要知道==检查两个 * 对象引用 * 是否相同,这不是你感兴趣的。另一方面,方法检查两个字符串是否具有相同的字符顺序,这才是这里重要的。
所以,

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();`   
}

另外,在每个代码块(甚至是单行代码)周围始终使用花括号也是一个好主意,这样可以避免常见错误的出现。

相关问题