在 Java 中填充数组时出现问题

Issues filling an array in Java

提问人:Erl_könig 提问时间:2/26/2023 最后编辑:Erl_könig 更新时间:2/27/2023 访问量:65

问:

我正在尝试用另一个文件中的唯一值填充数组。此文件总共有大约 20 个整数,其中 10 个是唯一的,10 个是副本。用户在 main 中输入数组的大小和文件的名称。

我认为问题来自这个 while 循环,它旨在填充数组,整理出重复项。

目前,它只成功对文件中 20 个整数中的 11 个进行排序。

private static int read(String inFileName, int[] list) {
        int size = 0;
        int i= 0;

        Scanner inFile = null;
        int val = 0;

        int trash = 0;
        boolean ID = false;
        int Unique = 0;
        int dupe = 0;
        int lineCount = 0;

        try { 
            inFile = new Scanner(new File(inFileName));
            while (inFile.hasNext()){
                lineCount++;
                try{
                    val = inFile.nextInt();
                    if(val < 0) { 
                        trash++;
                        continue; 
                    }

                    for(i = 0; i< size ;i++){ 
                        if(list[i] == val){
                            ID = true;
                            dupe++;
               
                        }

                    }
                    if (ID == false && size<list.length){ 
                        list[size] = val;
                        size++;
                        Unique++;
                    }

                }
                catch (InputMismatchException e){
                    trash++;
                    inFile.nextLine();
                }

            }
            System.out.println("lines: " + lineCount + ", unique: " + Unique +  ", dupes: " + dupe + ", trash: " + trash);
        }
        catch (FileNotFoundException e) {
            System.out.println("Error in opening " + inFileName);
        }


        return size;
    }

到目前为止,我已经尝试添加不同的 if 语句来尝试指定什么是唯一的,什么是副本。这通常有助于用正确数量的整数填充数组,但不能用唯一的整数填充数组。它似乎跳过了相当多的唯一整数,并用副本填充数组。我被困住了,任何建议将不胜感激。

Java 数组排序 异常 indexOutofboundsException

评论

0赞 njzk2 2/27/2023
您知道如何使用分步调试器吗?
0赞 njzk2 2/27/2023
(在这种情况下,有一个明显的问题:您永远不会重置您的 ID 标志。通过调试器运行会使这一点相当明显)

答:

0赞 Jai Prakash 2/27/2023 #1

评论了您的代码并对其进行了更改,然后应该可以工作。

private static int read(String inFileName, int[] list) {
    int size = 0;
    int i= 0;

    Scanner inFile = null;
    int val = 0;

    int trash = 0;
 // boolean ID = false;  remove 
    int Unique = 0;
    int dupe = 0;
    int lineCount = 0;

    try { 
        inFile = new Scanner(new File(inFileName));
        while (inFile.hasNext()){
            boolean ID = false; // Add here
            lineCount++;
            try{
                val = inFile.nextInt();
                if(val < 0) { 
                    trash++;
                    continue; 
                }

                for(i = 0; i< size ;i++){ 
                    if(list[i] == val){
                        ID = true;
                        dupe++;
           
                    }

                }
                if (ID == false && size<list.length){ 
                    list[size] = val;
                    size++;
                    Unique++;
                }

            }
            catch (InputMismatchException e){
                trash++;
                inFile.nextLine();
            }

        }
        System.out.println("lines: " + lineCount + ", unique: " + Unique +  ", dupes: " + dupe + ", trash: " + trash);
    }
    catch (FileNotFoundException e) {
        System.out.println("Error in opening " + inFileName);
    }


    return size;
}