我正在尝试构建通过Scanner构建的整数ArrayList。用户必须输入5到10个整数才能使ArrayList有效,但是在程序运行时实际输入的数目是未知的。
如何构建程序,使其仅在用户输入5、6、7、8、9或10个整数的情况下运行?
用户应该在一行上输入所有整数,但是我在下面尝试的代码将第5个整数后的值截断了,即使后面还有更多
public static ArrayList arrayListBuilder() {
Scanner input = new Scanner(System.in);
ArrayList<Integer> integerList = new ArrayList();
System.out.println("Enter 5-10 ints");
while (input.hasNextInt()) {
integerList.add(input.nextInt());
if (integerList.size() > 4 && integerList.size() < 9) {
break;
}
}
return integerList;
}
谢谢!
答案 0 :(得分:0)
您的问题出在您的if语句中。看起来您正在尝试确保用户输入的输入大于4且小于9。但是,实际上发生的情况是您一次读取一个用户输入的int值,并且一旦您的用户输入数组大于4,就停止。如果要保持大致相同的格式,可以尝试一些方法。将检查的下限移到while循环之外,这样程序将填充您的数组列表,然后检查它是否足够大。如果不够大,请循环备份。然后在while循环内部,继续检查上限。我相信这将完成您想要做的事情。我已经附上了可能有用的示例代码。
public static ArrayList arrayListBuilder() {
Scanner input = new Scanner(System.in);
ArrayList<Integer> integerList = new ArrayList();
while (true){
integerList.clear();
System.out.println("Enter 5-10 ints");
Boolean rightSize = true;
while (input.hasNextInt()) {
integerList.add(input.nextInt());
if (integerList.size() > 9) {
rightSize = false;
break;
}
}
if (integerList.size() < 5){
rightSize = false;
}
if (rightSize){
break;
}
}
return integerList;
}
答案 1 :(得分:0)
您对支票有正确的想法,但是没有正确的位置。如果它在循环内,则将在每次输入任何输入时运行检查。这意味着当列表收到第5个元素时,检查将返回true,并从循环中中断。相反,您应该阅读尽可能多的输入(或具有某种最大值,例如10),然后再执行检查。它可能看起来像这样:
public static ArrayList arrayListBuilder() {
Scanner input = new Scanner(System.in);
ArrayList<Integer> integerList = new ArrayList();
System.out.println("Enter 5-10 ints");
while (input.hasNextInt()) {
integerList.add(input.nextInt());
if (integerList.size() > 10)
break;
}
if (!(integerList.size() >= 5 && integerList.size() <= 10)) {
throw new IllegalArgumentException("Received too many integers");
}
return integerList;
}
这将而不是检查循环的每次迭代的大小,而是在扫描器没有更多整数可提供或大于最大值的情况下,检查列表的大小是否超出界限。新检查尺寸是否大于10(可以忽略)。循环结束后,将执行新的检查,如果检查次数大于或小于所需数目,则会引发错误。
如果您希望它不引发错误,则可以进行一次检查以查看其是否在所需范围之内或之下,但是可以执行以下操作:
if (integer.size() > 10) {
// Clamp the size of the list to the correct length, being 10
} else if (integer.size() < 5) {
// Ask for more numbers, or throw an error
}
这将替换循环外的其他检查,并允许在处理尺寸时进行更多自定义。
新检查的作用是检查大小是否大于范围的较大边,而else if
检查是大小是否小于范围的较小边。总体而言,它只是将前一个检查分为两个if语句,以使您能够钳位或请求更多整数。话虽如此,如果它在范围之内,它将通过并返回列表。
答案 2 :(得分:0)
如果您想在用户输入5、6、7、8、9或10的情况下构建列表,并且您不知道有效输入的实际大小,则可以使用以下方法:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class ArrayListBuilder {
public static void main(String[] args) {
arrayListBuilder();
}
public static List<Integer> arrayListBuilder() {
List<Integer> referenceList = Arrays.asList(5, 6, 7, 8, 9, 10);
List<Integer> inputList = new ArrayList<>();
getUserInput(referenceList, inputList);
System.out.println(inputList);
return inputList;
}
private static void getUserInput(List<Integer> referenceList, List<Integer> inputList) {
System.out.println("Enter 5-10 ints");
Scanner input = new Scanner(System.in);
int userInput = input.nextInt();
if (referenceList.contains(userInput)) {
inputList.add(userInput);
getUserInput(referenceList, inputList);
}
}
}