我正在输入一个巨大的数字,并将每一行数字添加到字符串"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);