我试图解决这个问题:
输入
输入流包含一组整数Ai(0≤Ai≤1018)。数字由任意数量的空格和换行符分隔。输入流的大小不超过256 KB。
输出
对于从最后一个到第一个的每个数字Ai,你应该输出它的平方根。每个平方根应打印在一个单独的行中,小数点后至少有四位数。
示例:
输入:
1427 0
876652098643267843
5276538
输出:
2297.0716
936297014.1164
0.0000
37.7757
这是我的代码:
public class ReverseRoot
{//start class
public static void main(String[] args)
{//start main
Scanner in = new Scanner(System.in);
ArrayList<Long> array = new ArrayList<Long>();
array.add(in.nextLong());
while(in.hasNextLong())
{
array.add(in.nextLong());
}
in.close();
for (int i = array.size(); i > 0; i--)
System.out.printf("%.4f%n", Math.sqrt((double)array.get(i)));
}//end main
}//end class
有人知道这笔交易是什么吗?
答案 0 :(得分:0)
您的for循环不起作用,因为您尝试访问列表中的非现有元素。
将循环更改为:
for (int i = array.size() - 1; i >= 0; i--)
System.out.printf("%.4f%n", Math.sqrt((double)array.get(i)));
}
为什么你在循环之外有array.add(in.nextLong());
?你可以删除它。
要退出输入,只需在控制台中键入任何非长字符。
答案 1 :(得分:0)
作为观察者,我们应该有2个循环。第一个循环用于多行&#39;第二个循环用于多个长值&#39;一行。
这是一个例子
public static void main(String[] args) throws Exception {
Scanner console = new Scanner(System.in);
Scanner lineTokenizer;
// this is to handle all 'lines'
while (console.hasNextLine()) {
String lineContent = console.nextLine();
if (lineContent == null || lineContent.isEmpty()) {
// this is to exit the program if there is no input anymore
break;
}
lineTokenizer = new Scanner(lineContent);
// this is to handle a 'line'
while (lineTokenizer.hasNext()) {
if (lineTokenizer.hasNext()) {
long number = lineTokenizer.nextLong(); // consume the valid token
System.out.printf("%.4f%n", Math.sqrt((double) number));
}
}
lineTokenizer.close(); // discard this line
}
console.close(); // discard lines.
}