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.作为一个新的编码,我坚持这一点。
答案 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
,并且您将调用nextInt
和nextLine
,则会获得1
和""
(结果,因为下一行尝试读取内容直到下一行分隔符,或直到数据结束。因此,1\nfoo
之后的nextInt()
光标将在1
1|\nfoo
之后设置\n
,因此在其当前位置和下一行分隔符(<% if @posts.any? %>
之间)仅为空字符串。