[英]Taking numeric (integer) input from user and inserting it in an array in Java
[英]Get integer array input from user in java
我需要从用户那里获得一系列整数。 系统不会提示用户输入数字。 输入将具有以下形式:
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。 如果有任何其他方法来实现这一点,我就是游戏。
为了将来参考,这里有一种方法可以使用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));
}
}
你说你可以在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.
*/
}
}
我意识到这种反应已经晚了很多年,但当我遇到这个问题时,我正在寻找一个不同的问题。 这里的答案让我很困惑,直到我意识到这不是我想要的。 看来这仍然出现在谷歌上,我决定发布这个。
Scanner in = new Scanner(inputFile);
int[] ints = Arrays.stream(in.nextLine().split("\\s+"))
.mapToInt(Integer::parseInt).toArray();
如果你的输入是“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
。
对于这种情况,我建议你在br.readLine()
返回的String上调用String.split()
,然后你将得到一个字符串数组,它们可以依次传递给Integer.parseInt()
。
您可以尝试使用StringTokenizer ,但如果您知道提前使用了哪个分隔符,只需使用String.split()
new Scanner(System.in).useDelimiter("[ ]")
应该帮助你避免Vanathi在他的回答中提到的问题。 至于知道数组的大小,例如:
br.readLine().split("[ ]").length;
应该这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.