Java:反向打印字符串

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

任务:编写一个程序,将一行文本作为输入,并反向输出该行文本。程序重复,当用户输入“Done”、“done”或“d”作为文本行时结束。

例如:如果输入是:

Hello there
Hey
done

输出为:

ereht olleH
yeH

这是我所拥有的:

import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      String inputString = scnr.nextLine();
      int i;
      
      while (!inputString.equals("done") || !inputString.equals("Done") || !inputString.equals("d")){
         for (i = inputString.length() - 1; i >= 0; i--){
            System.out.print(inputString.charAt(i));
         }
         
         System.out.println("");
         
         inputString = scnr.nextLine();
      }
   }
}

如果我输入

Hello there
Hey
done

我最终得到了

ereht olleH
yeH
enod

我不明白为什么在 while 循环末尾扫描“done”、“Done”或“d”后,while 循环再次迭代。我试过放

if (inputString.equals("done") || inputString.equals("Done") || inputString.equals("d")){
    break;
}

在我能想到的每个地方,但没有帮助。

请帮助我!!

java string reverse
1个回答
0
投票

您的代码的问题在于您的

while
循环的情况。您在条件之间使用逻辑或运算符 (
||
),这意味着只要其中一个条件为真,循环就会继续。在您的情况下,如果用户输入“done”、“Done”或“d”,至少其中一个条件将始终为真,因此即使您希望循环中断,循环也会继续。

要解决此问题,您应该在

&&
循环条件中使用逻辑 AND 运算符 (
||
) 而不是
while
。这样,只有当所有条件都不为真时,循环才会继续,当任何条件为真时,循环就会中断。这是更正后的代码:

import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      String inputString;
      
      while (true) {
         inputString = scnr.nextLine();

         if (inputString.equals("done") || inputString.equals("Done") || inputString.equals("d")) {
            break;
         }
         
         for (int i = inputString.length() - 1; i >= 0; i--){
            System.out.print(inputString.charAt(i));
         }
         
         System.out.println("");
      }
   }
}

通过此修改,只有当用户输入“done”、“Done”或“d”时循环才会退出,并将反转并打印所有其他输入的输入字符串。

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