请原谅我,如果已经问过这个问题,但是我正在尝试填充用户定义的大小数组,但是我想确保转储任何额外的输入或触发错误以重新输入输入。我的任务要求数组的所有输入都在一行上完成,空格分隔各个值。该程序工作正常,看到我们如何仍然在课程的开头,我不认为我们应该知道如何在一行上过滤输入数量,但这仍然是我的错
我已经找了一段时间寻找解决方案,但我发现的一切都不是我想要的。我想有一段时间(scannerVariable!=" \ n")会起作用,但是一旦我想到它,我就会意识到我不会为我的问题做任何事情,因为新行字符只是存在无论输入数量多少,每个数组都会遇到一次。问题的片段如下:
public static double[] getOperand(String prompt, int size)
{
System.out.print(prompt);
double array[];
array = new double[size];
for(int count = 0; count < size; count++)
{
array[count] = input.nextDouble();
}
return array;
}
我需要的是一些验证输入数量或转储/忽略额外输入的方法,这样缓冲区中就没有垃圾来跳过后面的输入。我能想到的唯一方法是计算空格数并将其与数组-1的大小进行比较。我不认为这是可靠的,我不知道如何为计数提取空白字符,除非我将所有输入都放入字符串并解析它。如果需要,我可以发布更多代码或提供更多详细信息。一如既往,感谢您的帮助!
答案 0 :(得分:0)
这可以帮到你。允许在由空格分隔的行上输入数字的函数。有效数字存储在类型Double
的列表中。
public static void entersDouble () {
Scanner input = new Scanner(System.in);
String s;
ArrayList<Double> numbers= new ArrayList<>();
System.out.print("Please enter numbers: ");
s=input.nextLine();
String [] strnum = s.split("\\s+");
int j=0;
while(j<strnum.length){
try {
numbers.add(Double.parseDouble(strnum[j++]));
}
catch(Exception exception) {
}
}
for (Double n : numbers)
System.out.println(n);
}
答案 1 :(得分:0)
在我看来,不是试图预先计算出输入的数量,而是试图逐一阅读它们,然后在太长或太短时采取适当的行动。
例如
public static double[] getOperands(String prompt, int size) {
double[] operands = new operands[size];
while (true) {
System.out.println(prompt);
Scanner scanner = new Scanner(System.in);+
int operandCount = 0;
while (scanner.hasNextDouble()) {
double val = scanner.nextDouble();
if (operandCount < size)
operands[operandCount++] = val;
}
if (operandCount == size)
return operands;
else
System.out.println("Enter " + size + " decimals separated by spaces.");
}
}