【问题标题】:How to repeatedly enter a string until user enters keyword to stop loop in java如何重复输入字符串直到用户输入关键字以停止java中的循环
【发布时间】:2019-03-02 22:32:11
【问题描述】:

我被困在这个字符串方法的程序中,我的问题是我无法让循​​环停止并且程序在输入关键字后打印当前存储的输出。我不是要比较字符串,而是要输入多个字符串并添加一个单词,在这种情况下,在输入单词“stop”之前将“not”添加到字符串中。一旦输入“停止”。系统将输出存储的整个字符串。

这是程序的问题: (StringConcat.java) 这个程序要求用户重复输入一个字符串。它应该将这些字符串连接在一起,但在用户输入的每对单词之间插入空格和单词“not”。当用户输入字符串“stop”时停止。显示最终字符串。例如,程序输出可能如下所示:

请输入一些字符串: “这样的” “眼睛” “你” “有” “停止”

“这样的眼睛不是你没有的”

到目前为止,这是我的代码:

import java.util.*;
public class StringConcat{

  public static void main(String [] args){

  Scanner sc = new Scanner(System.in);
  String s = new String();
     System.out.print("Please enter some Strings: ");
  for(int x=0; x<s.length(); x++){
     s = sc.nextLine();
     s = s + "not ";
     if(s == "stop"){
     System.out.println(s);
     break;
     }
     else{
     continue;
     }
   }
  }
}

【问题讨论】:

标签: java string for-loop methods java.util.scanner


【解决方案1】:

您的代码存在几个问题:
(1)s 的长度(即@987654324 @当时)与您的问题无关?
您需要一个没有预定义迭代次数的循环,例如 while (true),您将从该循环中以 break 退出。
(2) 在每次迭代中,您都会获取用户的输入并存储它在 s 中,所以你会丢失所有以前的值。
您需要一个单独的变量来存储用户的输入。
(3) continue 语句不需要作为循环中的最后一个语句。
(4) 因为在每次迭代中,您都附加了 " 不" 最后,在循环完成后,您必须从 s 中删除最后一个 "not"
(5) 在比较字符串时不要使用 ==。有这个方法equals()
这是我的解决方案:

Scanner sc = new Scanner(System.in);
String s = "";
System.out.print("Please enter some Strings: ");
while (true){
    String input = sc.nextLine();
    if(input.equalsIgnoreCase("stop"))
        break;
    s += input + " not ";
}
if (s.length() >= 5)
    s = s.substring(0, s.length() - 5);
System.out.println(s);

【讨论】:

    【解决方案2】:

    使用while 循环。

    为什么while 循环?

    通常,当我们不知道要执行的循环数时,我们必须始终使用while 循环。在这种情况下,仅当用户输入“stop”时。

    所以你需要一个String 字段来保存用户的话。我们也可以使用数字字段来跟踪是第一个词还是第二个词,考虑附加“非”词。

    那么,看看这个例子:

    Scanner s = new Scanner(System.in);
    String currentAnswer = "";
    String userWords = "";
    int tracker = 0;
    
    while (!currentAnswer.equals("stop")){
         currentAnswer = s.nextLine();
         userWords += currentAnswer + " ";
    
         if (tracker % 2 != 0) {
             userWords += "not ";
         }
    
         tracker++;
    }
    
    System.put.println(userWords);
    

    这也可以使用 for 循环来完成,但我真的建议在这种情况下使用 while 循环。

    编辑: 如您所见,我使用equals() 而不是== 来比较两个字符串,因为我们希望检查它的值,而不是它的对象相等性。

    当我们使用== 运算符时,我们试图检查两个对象是否指向相同的内存地址,但我们只想知道两个字符串是否具有相同的值。

    对于这种情况,知道我们可以使用其他方式进行比较是有效的,例如Objects.equals()甚至contentEquals()

    查看this discussion 了解有关比较字符串的更多信息。

    【讨论】:

    • 您可能需要提及==.equals(...) 的问题。
    • 我刚刚添加了额外的信息来回答,感谢您的指点。 :)
    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多