我必须写一些需要输入的内容,例如
4
2 11 1
3 2 1 1
4 4 5 6 2
5 1 1 1 1 2
第一个数字表示跟随的行数,每行的第一个数字表示跟随整数的数量,每行的最后一个数字表示将打印的内容(索引从1开始)。中间的数字是存储在数组中的数字:
11
2
5
1
这是我到目前为止所提出的,这显然是错误的。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int lines = sc.nextInt();
int size = sc.nextInt();
int[] a = new int[size - 1];
while (lines <= 0) {
lines = sc.nextInt();
}
for (int i = 0; i <= lines; i++) {
a[i] = sc.nextInt();
}
sc.close();
}
我不想要答案;我想要一些指导,因为我输了。
答案 0 :(得分:2)
似乎最终的目标是创建一个int[][]
,但值得注意的是它可能是一个锯齿状的矩阵(不同的行可能有不同的长度)。
如果你记住这一点,那么如何处理每一项输入就会变得更加简单。
从那里你想要根据每一行的最后一个元素打印每个数组的(i - 1)th
元素。一旦你有了矩阵,这很简单。如果有点奇怪。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int lines = sc.nextInt();
int[][] input = new Integer[lines][]; //This is the matrix we are building
for(int i = 0; i < lines; i++){ //For each row of numbers
int size = sc.nextInt(); //Find out how many numbers on this row
input[i] = new int[size]; //Create array of this size for this row
for(int x = 0; x < size; x++){ //For each number on this row
input[i][x] = sc.nextInt(); //Read it into the correct row,col positon
}
}
sc.close();
//Do printing
for(int[] row : input){
int lastElm = row[row.length - 1];
System.out.println(row[lastElm - 1]);
}
}
答案 1 :(得分:0)
我尝试以下方法:
将文档拆分为行,将其保存为字符串
忽略第1行,也许你可以用它来交叉检查总线数?
在行上使用.split(&#34; \ s +&#34;),然后将结果转换为整数
从每一行中取出最后一个数字(让我们调用数字i),然后获取数组的第i个元素
这有什么意义吗?我有一个问题是,输入文件是否有换行符,还是连续的数字流?
答案 2 :(得分:0)
您可以执行以下操作:
首先,阅读第一行:
int numberOfLines = Integer.parseInt(sc.nextLine());
然后使用给定的整数创建一个for
循环,以循环遍历以下行:
for (int i = 0; i < numberOfLines; i++) { ... }
然后,在for
循环中,取每一行:
String line = sc.nextLine();
然后,将行拆分为多个部分,空格为分隔符:
String[] parts = line.split(" ");
必须打印parts
数组的最后一个索引。
int index = parts[parts.length - 1];
int numberToPrint = parts[index];
System.out.println(numberToPrint);
如您所见,您不需要第一个元素来检查给定数字序列的长度。如果用空格分割线条,则可以使用数组属性length
调用最后一个元素。
PS:如果用户输入格式错误,可能会抛出ArrayIndexOutOfBoundsException
。你可以抓住它并指责用户是愚蠢的。