无法从控制台获取完整的String输入

时间:2015-07-18 13:11:54

标签: java arrays string input console

public class PairsWithSumK 
{
    public static void main(String[] args) {
        // Write your code here
        Scanner sc= new Scanner(System.in);
        int test= sc.nextInt();
        for(int i=0;i<test;i++)
        {
            int num= sc.nextInt();
            int sum= sc.nextInt();
            String a;
            a = sc.next();
            String [] array= a.split(" ");
            int count=0;
            for(int j=0;j<num;j++)
             {
                int x=0;
                x=sum-Integer.parseInt(array[j]);
                String xs =String.valueOf(x);
                if(Arrays.asList(array).contains(xs))
                {
                    int index=Arrays.asList(array).indexOf(xs);
                    array[index]=array[j]="-1";
                    count++;

                }
            }
            System.out.println(count);
        }
    }
}

我一直试图在java中获取控制台输入,但是不是占用整行然后将其转换为字符串数组,代码只占用第一个字符。例如:输入 - &#34; 1 2 3 4 5 6&#34 ;,字符串&#34; a&#34;只会采取1.作为一个新的编码,我坚持这一点。

2 个答案:

答案 0 :(得分:0)

扫描程序的next()方法只将字符串带到下一个分隔符(默认情况下为空格)。因此,在您的情况下,每次调用auf sc.next()都会读取您的一个号码(前1个,然后是2个等)。

因此,在您的代码中,您不会将它们作为字符串读取并将其拆分,而只是用sc.next()分别填充数组的每个索引。

(您可以使用sc.hasNext()查看是否添加了整个输入。)

答案 1 :(得分:0)

默认Scanner我们使用as delimiter 一个或多个空格next()将尝试读取并返回令牌直到下一个分隔符。例如,如果你的输入是

1 2 foo bar

然后这样的代码将返回

nextInt(); // 1
nextInt(); // 2
next();    // foo
next();    // bar

请注意,第一个next()没有返回foo bar但只返回foo,因为它后面有分隔符,所以没有可以分割的空间。如果您想阅读其余部分,则需要使用nextLine()

但要小心使用该方法,因为如果您的输入为1\nfoo,并且您将调用nextIntnextLine,则会获得1""(结果,因为下一行尝试读取内容直到下一行分隔符,或直到数据结束。因此,1\nfoo之后的nextInt()光标将在1 1|\nfoo之后设置\n,因此在其当前位置和下一行分隔符(<% if @posts.any? %>之间)仅为空字符串。