我想做以下事情:将数字读入堆栈; 逐个读出堆栈中的数字; 查找每个数字和打印结果的平方根
//need a stack class
import java.util.Iterator;
import java.util.Stack;
import java.io.*;
import java.util.*;
import java.lang.Math;
public class Root {
public static void main (String[] args) {
Scanner inscan = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
Stack<Integer> stk = new Stack<Integer>();
//Iterator iterate = stk.iterator();
//Read the input stream and push them onto the stack
while ( (inscan.hasNext()) ){ //LOOP1
stk.push(inscan.nextInt());
}
//Pop contents of stack one by one and find square root
while ( ! stk.isEmpty() ) {
int num = stk.pop();
double root = Math.sqrt(num);
out.printf("%.4f\n",root);
}
inscan.close();
out.flush();
}
}
问题在于阅读输入( inscan.hasNext())。 输入控制台上的最后一个数字后,程序仍然希望我提供输入 - 保持等待。
如何让程序知道我输入输入/我应该更改上面的LOOP1吗?
答案 0 :(得分:4)
您也可以使用标记输入来终止循环,即计算中未使用的输入。 e.g
while ( (inscan.hasNext()) ){
String val = inscan.next();
if(val.equals("!"))
break;
stk.push(Integer.parseInt(val));
}
更新:循环在输入'!'
时终止答案 1 :(得分:3)
您还可以在一行中输入所有文本,并按照您想要的任何分隔符进行分割:
//Read the input stream and push them onto the stack
for(String str: inscan.nextLine().split(" "))
stk.push(Integer.parseInt(str));
Input: 1 4 9 16 25
Output: 5.0000
4.0000
3.0000
2.0000
1.0000
答案 2 :(得分:2)
<强> [编辑] 强>
System.in
永远不会关闭;因此hasNext()
会产生infinite loop
按 CTRL + D (linux)或 Ctrl + Z + Enter (Windows)发送EOF
以关闭它。