我想将输入作为带有空格的单行输入,然后将该数据输入到二维数组中。
String[][] examples = new String[100][100];
for (int i = 0; i < 2; i++) {
System.out.println("enter line " + i);
String line = sc.next();
String[] linearr = line.split("\\s+");
for (int j = 0; j < 5; j++) {
examples[i][j] = linearr[j];
System.out.println(linearr[j]);
}
}
只有linearr[0]
输入值...linearr[1] , linearr[2]
,所以不要获取值,而是指出索引越界。
答案 0 :(得分:2)
declare @TableD TABLE (PeopleID int primary key, Name varchar(10));
INSERT INTO @TableD VALUES
(1, 'Chris')
, (2, 'Cliff')
, (3, 'Heather');
declare @TableA TABLE (ThingID int primary key, ThingName varchar(10))
INSERT INTO @TableA VALUES
(14, 'Bike')
, (17, 'Trailer')
, (18, 'Boat');
declare @TableF TABLE (PeopleID int, ThingID int, primary key (PeopleID, ThingID));
INSERT INTO @TableF VALUES
(1, 18)
, (1, 17)
, (2, 14);
SELECT D.Name, A.ThingName
FROM @TableD D
LEFT JOIN @TableF F
JOIN @TableA A
ON A.ThingID = F.ThingID
ON F.PeopleID = D.PeopleID
order by D.Name, A.ThingName;
SELECT D.Name, A.ThingName
FROM @TableF F
JOIN @TableA A
ON A.ThingID = F.ThingID
right join @TableD D
ON D.PeopleID = F.PeopleID
order by D.Name, A.ThingName;
Name ThingName
---------- ----------
Chris Boat
Chris Trailer
Cliff Bike
Heather NULL
只返回第一个单词。
sc.next()
返回整行。
而不是
sc.nextLine()
你可以做到
for(int j=0;j<5;j++)
{
examples[i][j]=linearr[j];
System.out.println(linearr[j]);
}
答案 1 :(得分:1)
您希望收到一行,但您当前的代码每个输入只会收到一个字。
而不是使用:
String line=sc.next(); //receive a word
将其更改为:
String line=sc.nextLine(); //receive a line
所以不要得到值而不是指数超出界限.....
而不是使用5
,拆分中的String标记数可以用作内循环的循环控件,因此您可能需要:
for(int j=0; j < linearr.length; j++)
当输入中的单词少于5个时,这将阻止IndexOutOfBoundsException
。
答案 2 :(得分:1)
而不是sc.next()
:
String line=sc.next();
您应该使用:
String line=sc.nextLine();
因为next()只能读取直到空格的输入,并且只能用于单个单词。如果你要阅读一行,你应该使用nextLine()
了解更多read this