【问题标题】:Java endless Scanner loopJava 无限扫描器循环
【发布时间】:2014-06-09 14:50:47
【问题描述】:

我正在尝试打印与用户粘贴到控制台相同的字符串。 我的代码如下所示:

import java.util.Scanner;

public class reader {
    public static void main(String[ ] args)  
    {   
        Scanner scan = new Scanner( System.in );
        StringBuffer buf = new StringBuffer();
        while ( scan.hasNextLine() ) {
            buf.append( scan.nextLine() );
            buf.append( "\n" );
        }

        String s = buf.toString();
        System.out.print(s);
    }
}

问题(我认为)是循环是无限的,即使用户只在控制台中粘贴 4 行,它也不会破坏 while 循环。

我想要的是“System.out.print(s);”打印 s。我该怎么办?当用户按 Enter 时,我可以中断循环吗?

【问题讨论】:

  • 您需要定义一个端点。您想要什么时候打破循环?

标签: java loops while-loop java.util.scanner


【解决方案1】:

您的代码将无法工作,因为扫描仪将等待输入。相反,检查输入是否为空(用户按回车键)并退出循环:

String line;

while (!(line = scan.nextLine()).equals("")) {
    buf.append(line);
    buf.append("\n");
}

这将一直运行,直到用户提供一个空行。

【讨论】:

  • 不,空行不会返回null
  • @Antoniossss 它会返回一个空字符串,对吧?
  • 现在用户必须按两次 Enter。问题是我分配的任务只让我有机会按一次 Enter
  • @user3712130 在这段代码中,你必须按回车键一次。
  • 好吧,你已经在控制台中提交了文本。我希望它在您提交文本时停止在同一个 Enter 处
【解决方案2】:

在指定的用户输入后,您将不得不中断循环,例如。 X Enter。你的循环永远不会被 itsetf 打破,因为Scanner 将尝试从标准输入中读取。

【讨论】:

    【解决方案3】:

    你可以在两次回车后结束它。 代码如下所示:

    包实用程序; 导入 java.util.Scanner;

    公共类阅读器{

    public static void main(String[ ] args)  
    { 
    
    Scanner scan = new Scanner( System.in );
    StringBuffer buf = new StringBuffer();
    while ( scan.hasNextLine() ) {
        System.out.println("<<");
        String line = scan.nextLine();
        buf.append( line );
        buf.append( "\n" );
        System.out.println(line);
        if(line.equals(""))
            break;
    
    }
    String s = buf.toString();
    System.out.print(s);
    }
    }
    

    您甚至可以使用退出等自定义消息。

    【讨论】:

    • 问题是我分配的任务只给了我一次回车的机会
    • 只读一行就好了。这就是你想要的吗?
    • 嗯,什么意思?
    • 您是否希望用户输入文本一次,一旦输入,它应该退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    相关资源
    最近更新 更多