首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将长度可变的扫描仪用户输入添加到ArrayList?

如何将长度可变的扫描仪用户输入添加到ArrayList?
EN

Stack Overflow用户
提问于 2019-03-27 10:30:27
回答 3查看 182关注 0票数 0

我正在尝试建立一个通过扫描仪构建的整数ArrayList。用户必须输入5到10个整数才能使ArrayList有效,但实际输入的数量在程序运行时是未知的。

如何构建程序,使其仅在用户输入5、6、7、8、9或10个整数时运行?

用户应该在一行中输入所有整数,但我在下面尝试的代码在第5个整数之后将其截断,即使后面还有更多

代码语言:javascript
复制
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;
}

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2019-03-27 11:00:39

您的问题出在if语句中。看起来您是在尝试确保用户的输入有4个以上的整型数和9个以下的整型数。然而,实际发生的情况是,您每次读取用户的输入一个int,一旦您的用户输入数组大于4,您就会停止。如果您想让它保持大致相同的格式,您可以尝试以下几种方法。将对下限的检查移到while循环之外,以便程序将填充数组列表,然后检查它是否足够大。如果它不够大,则循环返回。然后在while循环内部保持对上限的检查。我相信这会完成你想要做的事情。我附上了可能有帮助的示例代码。

代码语言:javascript
复制
    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;
    }
票数 0
EN

Stack Overflow用户

发布于 2019-03-29 23:13:37

你对支票的想法是正确的,但没有把它放在正确的位置。如果它在循环中,则每次给定任何输入时都会运行检查。这意味着当列表接收到第五个元素时,检查将返回true并中断循环。相反,您应该读取尽可能多的输入(或具有某种最大值,如10),然后执行检查。它可能看起来像这样:

代码语言:javascript
复制
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,则是新的检查,可以忽略)。循环完成后,将执行新的检查,如果数量多于或少于所需数量,则会抛出错误。

如果你不希望抛出一个错误,你可以做一次检查,看看它是在期望的范围之上还是之下,但是要这样做:

代码语言:javascript
复制
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检查是检查大小是否小于范围的小边。总而言之,它只是将前面的check分成两个if语句,使您能够钳制或请求更多整数。也就是说,如果它在范围内,它将直接传递,并返回列表。

票数 0
EN

Stack Overflow用户

发布于 2019-03-29 23:45:11

如果您想要在用户输入5、6、7、8、9或10时构建列表,并且您不知道有效输入的实际大小,下面是我想出的方法:

代码语言:javascript
复制
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);
        } 
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55368896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档