有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用布尔值退出循环,然后重做循环

我对Java还相当陌生,所以我不知道太多新奇的东西,我有点被卡住了

我需要做的是,拿一个文本文件;将内容导入ArrayList;检查每一行是否有两个“#”之间的特定Char;然后再次检查ArrayList中的每一行,以查看其中一行是否已经具有该Char;如果是,那么我需要重新输入整个String行并重新检查它;如果没有,那么我需要把它放在ArrayList的底部,然后放到文本文件中

到目前为止,我已经到了需要检查输入行的Char是否重复的部分,但是我只能重复一次。例如,如果我再次输入它,由于其中一个循环,我将得到一个索引AutofBoundsException。所以,我想我应该使用一个boolean来退出循环并重新进入它们,但不幸的是,在进入整个String一次之后,它要求我再次这样做以重复这个过程,因为我退出并进入了错误的循环,但我似乎无法确定是哪个循环

ArrayList<String> Prices = new ArrayList<String>();
    try (BufferedReader br = new BufferedReader (new FileReader("file.txt"))){
        String CurrentLine;
        while ((CurrentLine = br.readLine()) != null){
            Prices.add(CurrentLine);
        }
    }catch (IOException e) {
        e.printStackTrace();
    }
    boolean CheckSequence = true;
    boolean Redo = false;
    String StringArrayPrices[] = new String[Prices.size()];
    Scanner sc = new Scanner (System.in);
    while (CheckSequence == true){
        System.out.println("Insert product in the following format, 'Product#Letter#Number': ");
        String ProductString = sc.nextLine();
        char ProductArray[] = ProductString.toCharArray();
        for (int i = 0; i < Prices.size(); i++){
            StringArrayPrices[i] = Prices.get(i);
            char CharArrayPrice[] = StringArrayPrices[i].toCharArray();
            for (int j = 0; j < CharArrayPrice.length && Redo == false; j++){
                if (CharArrayPrice[j] == '#' && CharArrayPrice[j+2] == '#'){
                    char TemporaryLetter = CharArrayPrice[j];
                    for (int k = 0; k < ProductArray.length && Redo == false; k++){
                        if (ProductArray[k] == '#' && ProductArray[k+2] == '#'){
                            char TemporaryLetter2 = ProductArray[k];
                            if (TemporaryLetter == TemporaryLetter2){
                                System.out.println("The letter is repeating. Enter product again or exit by writing '-1': ");
                                ProductString = sc.nextLine();
                                if (ProductString == "-1"){
                                    CheckSequence = false;
                                }
                                Redo = true;
                            }
                            if (TemporaryLetter != TemporaryLetter2){
                                Prices.add(ProductString);
                            }
                        }
                    }
                }
            }

        }
    }

现在,当我重新输入String时,我收到的第一条消息是“”以以下格式插入产品,'product#Letter#Number':“”,而不是重复的“”。再次输入产品或通过写入“-1”:“”退出

第一行应该只在我输入一个全新的String时显示,而不是在重复上一行时显示

我希望我没有把这弄得太混乱


共 (1) 个答案

  1. # 1 楼答案

    并非所有的循环都是正确的

    我不完全确定这个要求,但我认为这符合要求

    请注意,您可能应该定义一个Product类来封装其中的大部分内容

    List<String> prices;
    Set<String> letters;
    try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
        prices = reader.lines.collect(Collectors.toList());
    }
    
    letters = prices.stream.map(p -> getLetter(p)).collect(Collectors.toSet());
    Scanner scanner = new Scanner(System.in);
    boolean shouldContinue = true;
    while (shouldContinue) {
        System.out.println("Enter Product");
        String product = scanner.nextLine();
        if (product.equals("-1")) {
            shouldContinue = false;
        } else {
            String letter = getLetter(product);
            if (letters.contains(letter) {
                System.out.println("Repeat. Re-enter");
            } else {
                prices.add(product);
                letters.add(letter);
            }
        }
    }
    

    和助手一起

    private String getLetter(String s) {
        return s.split("#")[1]; //Or use the appropriate regex to extract the letter.
    }
    

    这可能需要一些错误处理

    为了避免java 8的流,可以使用问题中使用的代码来构建prices

    Set<String> letters = new HashSet<>();
    for (String price : prices) {
        letters.add(getLetter(price));
    }