为什么我的循环在计数最后一个数字之前跳出来?

时间:2018-12-15 23:37:27

标签: java arrays loops for-loop

程序的任务是取1到100之间的整数并计算它们出现的次数。

例如,用户输入的数字是1 2 2 3 3 25 25 67 98 99 99。 输出为:

final PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int versionCode;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    versionCode = (int) pInfo.getLongVersionCode(); // avoid huge version numbers and you will be ok
} else {
    //noinspection deprecation
    versionCode = pInfo.versionCode;
}

问题

虽然我的程序将成功计算大多数数字,但无法计算两个99,如果我用98代替倒数第二个99,则输出将出现98次2次,但不会计数99。

我已经尝试调试此东西,我不应该说它不计算数组中的最后一个或多个数字,因为它确实可以计数,但是它会在移至else-if语句之前立即跳出。

它似乎跳出来了,因为第一个if语句为true,因此不需要转到else,它就完成了循环,但弄清楚如何使它仍然打印最后一个数字,这使我感到困惑。 / p>

这是代码。问题出在LinearSearch()方法中:

1 occurs 1 time
2 occurs 2 times
3 occurs 2 times
25 occurs 2 times
67 occurs 1 time
98 occurs 1 time

2 个答案:

答案 0 :(得分:1)

问题是您错过了最后一个数字的迭代。

public class Job8 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int usernumbers[] = new int[20];
        int size = usernumbers.length;

        System.out.println("Enter integers between 1 and 100, " + "enter a 0 to end ");

        // user populates the array usernumbers
        int i = 0;
        do {
            usernumbers[i] = input.nextInt();
        } while (usernumbers[i++] != 0);

        // invokes the method to sort the array
        arraySort(usernumbers);

        System.out.println(java.util.Arrays.toString(usernumbers));

        // this invokes the method to search the array for the numbers
        linearSearch(usernumbers);

        input.close();
    }

    public static void arraySort(int[] usernumbers) {
        // bubblesort for usernumbers[]
        int a = usernumbers.length;
        for (int i = 0; i < a - 1; i++) {
            for (int j = 0; j < a - i - 1; j++) {

                if (usernumbers[j] > usernumbers[j + 1]) {
                    int temp = usernumbers[j];
                    usernumbers[j] = usernumbers[j + 1];
                    usernumbers[j + 1] = temp;
                }
            }
        }
    }

    public static void linearSearch(int[] usernumbers) {
        int count = 0;
        int currentNumber = 0;
        for (int i = 0; i < usernumbers.length; i++) {
            int nextIndex = i + 1;
            currentNumber = usernumbers[i];

            if (currentNumber == 0) {
                continue;
            }

            if (nextIndex < usernumbers.length) {
                int nextNumber = usernumbers[nextIndex];
                if (currentNumber == nextNumber) {
                    count++;
                    continue;
                } else {
                    if (count == 0) {
                        System.out.println(currentNumber + " occurs once");
                    } else {
                        System.out.println(currentNumber + " occurs " + count + " times");
                        count = 0;
                    }
                }
            }
        }

        System.out.println(+currentNumber + " occurs " + (count + 1) + " times");
    }
}

答案 1 :(得分:0)

欢迎来到SO。

恐怕您已经完全误解了代码中的问题。问题在于,对数组进行排序时,会将所有零值移到最前面。当您要打印linearSearch中的事件时,您假定存在尾随零以强制打印最终值。这应该是相对容易解决的问题,但是如果您需要提示,请在评论中问我一个问题。