Java输入方法没有终止

时间:2016-08-25 18:09:56

标签: java algorithm

我试图解决这个问题:

输入

输入流包含一组整数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

有人知道这笔交易是什么吗?

2 个答案:

答案 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.
    }