我有一个输入(控制台输入,而不是文件)。第一行包含3个整数:a,b,c。然后下一个a + c行包含由空格分隔的2个整数。 E.G:
3 2 4
91 94
92 97
97 99
92 94
93 97
95 96
90 100
我必须读取前3个数字,然后(在这种情况下)3 + 4行2个整数。如何正确读取输入?我将文件发送到在线编译器(如果重要的话,Codeforces.com)
这是我的代码(我尝试部分阅读该文件,但它不能按预期工作):
//reads the first 3 numbers
public static int[] readInit(){
Scanner sc = new Scanner(System.in);
int[] integers = new int[3];
for(int i = 0; i <=2; i++)
{
integers[i] = sc.nextInt();
}
return integers;
}
//reads the next 3 lines
public static int[] read(){
Scanner sc = new Scanner(System.in);
int[] integers = new int[2];
for(int i = 0; i <=1; i++)
{
integers[i] = sc.nextInt();
}
return integers;
}
public static void main(String[] args) {
int[] initData = readInit();
nrOfRecipes = initData[0];
minNrRecommended = initData[1];
nrOfQuestions = initData[2];
for (int i=0; i<nrOfRecipes; i++){
int[] data = read();
minDegrees = data[0];
maxDegrees = data[1];
...
}
...
但此代码仅从第一行读取前3个整数。如何正确读取数据?谢谢!
答案 0 :(得分:0)
我会按照说明操作,先阅读a
,b
和c
。然后构造一个2D数组。然后填写它。最后(因为我不知道你想用你的k
行做什么),你可能只是打印它。
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(), b = sc.nextInt(), c = sc.nextInt();
int[][] arr = new int[a + c][b];
for (int i = 0; i < (a + c); i++) {
for (int j = 0; j < b; j++) {
arr[i][j] = sc.nextInt();
}
}
System.out.println(Arrays.deepToString(arr));
根据您的示例输入,我得到
[[91, 94], [92, 97], [97, 99], [92, 94], [93, 97], [95, 96], [90, 100]]
答案 1 :(得分:0)
我无法正确理解您的问题,但如果您只想阅读每行中的两个integers
,具体取决于第一行中的第一个和第三个int
,您可以使用类似的东西:
try (Scanner sc = new Scanner(System.in)) {
String[] first = sc.nextLine().split("\\s+");
int lines = Integer.parseInt(first[0]) + Integer.parseInt(first[2]);
while (lines-- > 0) {
int a = sc.nextInt();
int b = sc.nextInt();
// Do whatever you want here with the two integers
}
}
编辑:
如果通过System.in
输入,nextLine
将一次读取每一行,并且不会仅读取第一行。但是,您要在每种方法中重新初始化scanner
。尝试使用一个scanner
用于所有方法。
您可以通过在方法之外初始化扫描程序来执行此操作,如下所示:
static Scanner sc = new Scanner(System.in);
然后在您的方法中使用sc.nextInt();
而不声明Scanner
。