在循环中发现数组中的唯一数字时遇到逻辑错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在循环中发现数组中的唯一数字时遇到逻辑错误相关的知识,希望对你有一定的参考价值。

这是我的Java类课本中的一个问题,用户输入10个整数。该程序应该读取所​​有整数,并且仅显示唯一数字(不重复)作为输出。

-运行时的输出为:输入10个数字:1 2 3 2 1 6 3 4 5 2不同数字的数量是5不同的数字是:1 2 3 0 0

-何时应为:输入10个数字:1 2 3 2 1 6 3 4 5 2不同数字的数量是5不同的数字是:1 2 3 6 4 5

由于我们处于课程的早期阶段,并且了解该语言,因此我们的任务是使用嵌套循环来完成此任务。任何帮助,将不胜感激。

import java.util.Scanner;

public class chapter7e5 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        //create Scanner

        System.out.print("Enter 10 numbers: ");

        int[] numberArray = new int[10];
        //create array for all numbers

        int[] distinctArray = new int[10];
        //create array for distinct numbers

        int distinct = 0;

        for (int i = 0; i < 10; i++)
        //for loop to have user enter numbers and put them into array

            numberArray[i] = input.nextInt();

        distinctArray[0] = numberArray[0];
        //first value will be distinct

        for (int i = 1; i < numberArray.length; i++) {
        //loop to go through remaining values in numberArray

            boolean exists = false;
            //create boolean

            for (int j = 0; j < distinctArray.length; j++) {
            //loop to check if value exists already in distinctArray

                if (numberArray[i] == distinctArray[j]) {

                    exists = true;
                    //if value does already exists, then exist = true

                    break;
                    //break out of inner loop

                }
            }

            if (exists == false) {
            //if value is unique then add it to the distinct array

                distinctArray[i] = numberArray[i];

                distinct++;
                //increment variable distinct

            }
        }
        //}

        System.out.println("The number of distinct numbers is " + distinct);

        System.out.print("The distinct numbers are: ");

        for (int k = 0; k < distinct; k++)

            System.out.print(distinctArray[k] + " ");

    }

}
答案

您使用了错误的变量作为索引来将值放入distinctArray[]

替换

distinctArray[i] = numberArray[i];
distinct++;

with

distinctArray[++distinct] = numberArray[i];

或者],您可以将其编写为:

distinct++;
distinctArray[distinct] = numberArray[i];

此更改后的示例运行:

Enter 10 numbers: 1 2 3 1 2 3 4 4 5 1
The number of distinct numbers is 4
The distinct numbers are: 1 2 3 4 
另一答案

我有以下建议:

以上是关于在循环中发现数组中的唯一数字时遇到逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章

为什么我不能在此片段中生成唯一对象数组?

返回到循环中间循环的开始?

Php Laravel 日期数组循环逻辑

在c ++中循环遍历数组时遇到问题[关闭]

双重大数组循环优化

如何使用 for-loop if 语句填充具有唯一随机数的数组?