虽然循环不会退出Java,但



我正在输入一个巨大的数字,并将每一行数字添加到字符串"hold"中。一旦没有什么可读取的内容,它应该退出while循环并将字符串转换为BigInteger。

它将在循环中运行,直到什么都没有留下,然后什么也没有发生。它不会继续到BigInteger或再次进入循环。我到处找了找,不明白为什么它卡住了。

System.out.print("Enter the number you want looked at: ");
String hold = "";
String line = null;
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
while ((line = read.readLine()) != null){
    hold = hold.concat(line);
}
BigInteger giantNumber = new BigInteger(hold);
System.out.print(giantNumber);

我希望它退出循环,而不需要用户做任何事情,然后在开始时输入数字。

它似乎陷入了困境,因为System.in正在寻找更多的输入,并且在while循环中没有接收到任何可比较的内容。我不知道以后该怎么办。

如果有帮助的话,我输入的号码是:

73167176531330624919225119674426574742355349194934969835203127745063262395783118069684801869478851843858615607891294949545950173795833195285320880551112540698774715852386305071569329096329522744304355766896648950445244521617318564030987111217223831136222989342380308135336276661428280644448666452387493035890729629049156044077239071381051585930796086670172427121883998799087922749219016997208880937766572733300105336788122023542180975125454059475224352584907711670551601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345658541227588666881164271714799244429282308634656748139191231628245861786645835912456652947654568284891288314260769004224219022671055626321111109370544217506941658960408071984038509962455444362981230987877992724428490918884580156166097919133875499200524063689912567176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

System.in读取,直到流到达其末尾。如果您在交互式模式下使用Java程序,这意味着字符串通常不会结束,除非用户按下Ctrl+D或终端操作员识别的将关闭输入流的组合键。

你可以做一些事情:

  • 使用Ctrl+D结束终端输入

  • 使用文件作为输入提要(java -jar program.jar < inputfile(。在这种情况下,流将在文件结束后终止

  • 实现停止代码

    while ((line = read.readLine()) != null){
        if(line.equals("stop")) {
            break;
        }
        hold = hold.concat(line);
    }
    

    在这里,当您为某一行输入stop时,java程序将结束。

如果您想为空行实现break,请获取行修剪并检查是否为空。

你的方式:

    while ((line = read.readLine()) != null){
        if(line.trim().equals("")){
            break;
        }
        hold = hold.concat(line);
    }

使用扫描仪代替:

...
    Scanner in = new Scanner(System.in);
    while(in.hasNextLine()){
        String line = in.nextLine();
        if(line.trim().equals("")){
            break;
        }
        hold = hold.concat(line);
...

在这种情况下,条件内的赋值是可以的,因为赋值被一对额外的括号包围——比较显然是!=null,我们不可能想要键入line==reader.readLine((.

然而,for循环在这里可能更优雅:

for (String line = reader.readLine(); line != null; line = reader.readLine()) {
    doSomething(line);
}
或者,我们可以这样做,这也限制了行的范围,就像for循环一样,并额外消除了不必要的重复:注意:此方法不会突变任何变量

while (true) {
    final String line = reader.readLine();
    if (line == null) break;
    doSomething(line);
}

您可以使用字符串类的isEmpty((函数来检查字符串是否为空。

while ((line = read.readLine()) != null&&!line.isEmpty())
{
     hold = hold.concat(line);
}
System.out.print(hold);

相关内容

  • 没有找到相关文章

最新更新