我需要从用户那里获得一系列整数。 系统不会提示用户输入数字。输入将采用以下形式:
6
34 12 7 4 22 15
3
3 6 2
第一行表示第二行中的整数数。 我首先尝试将第二行作为String读取,然后使用StringTokenizer将其分解为代码中的整数。正常情况发生在我的程序中很多,这很费时间 我需要直接阅读它们。 我记得在C ++中它过去相当简单。以下代码段用于执行此操作。
for(i=0;i<6;i++)
cin>>a[i];
为实现这一目标,我使用了java.util.Scanner,我的代码如下所示:
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
Scanner src = new Scanner(System.in);
for(x=0;x<2;x++){
arraySize = Integer.parseInt(br.readLine());
for(i=0;i<arraySize;i++)
array[i] = src.nextInt();
}
在这种情况下,我收到以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "34 12 7 4 22 15"
我愿意接受建议,而不是单独坚持使用Scanner。如果有任何其他方法可以实现这一点,我就是游戏。
答案 0 :(得分:10)
为了将来参考,这里有一种方法可以使用Scanner
类:
import java.util.Arrays;
import java.util.Scanner;
public class NumberReading {
public static int [] readNumsFromCommandLine() {
Scanner s = new Scanner(System.in);
int count = s.nextInt();
s.nextLine(); // throw away the newline.
int [] numbers = new int[count];
Scanner numScanner = new Scanner(s.nextLine());
for (int i = 0; i < count; i++) {
if (numScanner.hasNextInt()) {
numbers[i] = numScanner.nextInt();
} else {
System.out.println("You didn't provide enough numbers");
break;
}
}
return numbers;
}
public static void main(String[] args) {
int[] numbers = readNumsFromCommandLine();
System.out.println(Arrays.toString(numbers));
}
}
答案 1 :(得分:3)
你说你可以在C ++中使用以下代码:
for(i=0;i<6;i++)
cin>>a[i];
如果这是您在C ++中使用的,为什么不使用它?
for(i=0;i<6;i++)
a[i] = input.nextInt();
假设扫描仪声明是:
Scanner input = new Scanner(System.in);
从我所见,人们正试图为你编写整个程序。但是,正如你所说,你可以使用C ++代码解决这个问题,我只是为你将代码转换为Java。
如果你想要完整的代码,请点击这里:
import java.util.Scanner;
public class arrayFun {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Create a new array. The user enters the size
int[] array = new int[input.nextInt()];
// Get the value of each element in the array
for(int i = 0; i < array.length; i++)
array[i] = input.nextInt();
/* Note that the user can type the following:
* 6
* 34 12 7 4 22 15
* This will set the array to size 6
* array[0] = 34;
* array[1] = 12;
* etc.
*/
}
}
我意识到这种反应已经晚了很多年,但当我碰到这个时,我正在寻找一个不同的问题。这里的答案让我很困惑,直到我意识到这不是我想要的。看来这仍然出现在谷歌上,我决定发布这个。
答案 2 :(得分:2)
Scanner in = new Scanner(inputFile);
int[] ints = Arrays.stream(in.nextLine().split("\\s+"))
.mapToInt(Integer::parseInt).toArray();
答案 3 :(得分:0)
如果您的输入是“6 34 12 7 4 22 15 3 3 6 2”,由空格分隔,那么它将被br.readLine()
一次性读取。正如您所见,您无法将“6 34 12 7 4 22 15 3 3 6 2”传递给parseInt
。
对于这种情况,我建议你在String.split()
返回的字符串上调用br.readLine()
,然后你将得到一个字符串数组,这些字符串可以依次传递给Integer.parseInt()
答案 4 :(得分:0)
您可以尝试使用StringTokenizer,但如果您知道提前使用的分隔符,只需使用String.split()
答案 5 :(得分:0)
new Scanner(System.in).useDelimiter("[ ]")
应该帮助你避免Vanathi在他的回答中提到的问题。至于知道数组的大小,比如:
br.readLine().split("[ ]").length;
应该这样做。