我试图编写一个程序来确定数组中重复整数的数量及其计数,但是程序输出的结果大致为fulse,所以我的问题是我的代码中的问题是我不想使用任何类,谢谢。

例如 :

输入:输入数组大小:11输入数组元素:13 34 22 4 499 4 22 18 4 1 1输出:有3个重复数字:22:2次4:3次1:2次

但我的输出是:

1:2倍4:3倍4:2倍22:2倍

import java.util.Scanner;

public class repeated_elements {

    public static void main(String[] args) {
        Scanner input = new Scanner (System.in);
        // User Choose The Array Size
        System.out.println("Enter Array Size: ");
        int size = input.nextInt();

        // The Array
        int[]Array = new int[size];

        // Read The Array Elements From The User
        System.out.println("Enter Array Elements:");
        for(int i =0; i<size; i++){
            Array[i]=input.nextInt();
        }

        // Sorting The Array (Ascending Order)
        for(int j = 0; j<size; j++){

            int mini = Array[j];
            int mini_index = j;

            for(int i = j; i<size; i++){
                if(Array[i] < mini){
                    mini = Array[i];
                    mini_index = i; 
                }
            }
            int tmp = Array[j];
            Array[j] = Array[mini_index];
            Array[mini_index] = tmp;
        }

        // Count The Repeated Numbers
        for(int i=0; i<size; i++){

            int key = Array[i];
            int counter = 0;

            for(int j=i; j<size; j++){
                if(key == Array[j]){
                    counter++;
                }
            }

            if(counter > 1 ){
                System.out.println(Array[i]+":"+counter+" times ");
            }
        }
    }
}

#1楼 票数:1 已采纳

而不是这段代码:

   // Count The Repeated Numbers
    for(int i=0; i<size; i++){

        int key = Array[i];
        int counter = 0;

        for(int j=i; j<size; j++){
            if(key == Array[j]){
                counter++;
            }
        }

        if(counter > 1 ){
            System.out.println(Array[i]+":"+counter+" times ");
        }
    }

尝试这个:

   // Count The Repeated Numbers
    for(int i=0; i<size; ){   //<--- note the removal of i++

        int key = Array[i];
        int counter = 0;

        for(int j=i; j<size; j++){
            if(key == Array[j]){
                counter++;
            }else{
                i=j;
                break;
            }
        }

        if(counter > 1 ){
            System.out.println(key+":"+counter+" times ");
        }
    }

问题是您不同步ij变量

所以对于像这样的输入:

1 1 1 1

你会得到

1:4
1:3
1:2

更正后,我测试了程序并输入:

11
13 34 22 4 499 4 22 18 4 1 1

我得到:

1:2 times 
4:3 times 
22:2 times

编辑:AS @CabelB建议。 值得一看一下Map实现。

#2楼 票数:0

如果我是您,我可以通过Map进行解决,并在那里进行计数,但是您的代码已更正:

公共类Rep {

public static void main(String[] args) {
    int[] input = {1,1,2,2,2,0};
    // User Choose The Array Size
    System.out.println("Enter Array Size: ");
    int size = input.length;

    // The Array
    int[]Array = new int[size];

    // Read The Array Elements From The User
    System.out.println("Enter Array Elements:");
    for(int i =0; i<size; i++){
        Array[i]=input[i];
    }

    // Sorting The Array (Ascending Order)
    for(int j = 0; j<size; j++){

        int mini = Array[j];
        int mini_index = j;

        for(int i = j; i<size; i++){
            if(Array[i] < mini){
                mini = Array[i];
                mini_index = i; 
            }
        }
        int tmp = Array[j];
        Array[j] = Array[mini_index];
        Array[mini_index] = tmp;
    }

    // Count The Repeated Numbers
    for(int i=0; i<size; i++){

        int key = Array[i];
        int counter = 0;

        for(int j=0; j<size; j++){
            if(key == Array[j]){
                counter++;
            }
        }

        if(counter > 0 ){
            System.out.println(Array[i]+":"+counter+" times ");
        }
    }
}

}

#3楼 票数:0

您的代码似乎还可以,但是有一个小问题。 输出外观数时,每次都将遍历整个数组,而不管当前检查的值是否已经被检查过。 简而言之,对于[1、1、1、1、2、2、2、2、3、3]的输入数组,输出是1:4倍,1:3倍和1:2倍,依此类推。

我认为您需要从排序后的数组中分离出不同的值,或者至少确保不对已经计数的值重复计数。

#4楼 票数:0

您每次都解析整个数组,因此您必须跳过已解析的项目。 最后将i计数器按counter值递增:

if(counter > 1 ){
    System.out.println(Array[i]+":"+counter+" times ");
    i +=counter;
}

那就足够了,希望对您有所帮助

#5楼 票数:0

当我们拿起钥匙来寻找发生的地方时,首先我们需要检查它是否已经在寻找发生的地方(例如4)。 因此,我将键保留在数组中,没有任何重复,然后开始搜索它。 使用collections方法可以轻松完成。

public class RepeatedElements {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        // User Choose The Array Size
        System.out.println("Enter Array Size: ");
        int size = input.nextInt();

        // The Array
        int[] Array = new int[size];

        // Read The Array Elements From The User
        System.out.println("Enter Array Elements:");
        for (int i = 0; i < size; i++) {
            Array[i] = input.nextInt();
        }

        // Sorting The Array (Ascending Order)
        for (int j = 0; j < size; j++) {

            int mini = Array[j];
            int mini_index = j;

            for (int i = j; i < size; i++) {
                if (Array[i] < mini) {
                    mini = Array[i];
                    mini_index = i;
                }
            }
            int tmp = Array[j];
            Array[j] = Array[mini_index];
            Array[mini_index] = tmp;
        }
//      System.out.println("sorted array:"+Arrays.asList(Array));
        int key[] = new int[Array.length];
        int keylen = 0;
        // Count The Repeated Numbers
        for (int i = 0; i < size; i++) {


            int found = 0;
            int k;
            for ( k=0;k<keylen;k++){
                if (key[k]==Array[i]){
                    found=1;
                }
            }
//      11  System.out.println("k value"+k+"i value"+i);
            if (found==1)
                continue;//already counted
            else
                key[keylen]=Array[i];

            int counter = 0;

            for (int j = i; j < size; j++) {
                if (key[keylen] == Array[j]) {
                    counter++;
                }
            }
            keylen++;
            if (counter > 1) {
                System.out.println(Array[i] + ":" + counter + " times ");
            }
        }

    }
}

输出附在屏幕截图中。 在此处输入图片说明

  ask by amr translate from so

未解决问题?本站智能推荐:

3回复

存储不确定数量的整数

我的任务是检查数字是否是质数,或者显示质数,然后显示其除法(例如12除以1、2、3、4、6和12)。
3回复

整数数组中重复值的数量

我需要一个函数或方法来查找在一个值中重复的值的数量。 我不是在寻找重复的数字,或者它们重复的次数,而只是寻找一般重复的数字的数量。 这听起来可能令人困惑,所以这里有一个例子:int[] anArray = { 1, 2, 3, 4, 3, 1, 7, 2, 9, 1}; 数字
4回复

Java(计数不同的整数)

例如,如何返回数组中不同/唯一值的数量
3回复

ArrayIndexOutOfBoundsException,数组和整数的计数

我从事这项工作已有两天了,我现在很困难! 我的作业要求我创建一个程序,该程序: 询问用户要执行多少次跑步(例如3次翻转20次)(输出应在每个试验之间进行比较) 询问用户他希望硬币翻转多少次(他最多可以翻转1000次) 随机生成一个1到10之间的数字,并将所有数字存储在数组中
4回复

如何计算这些重复的整数?[重复]

这个问题已经在这里有了答案: 如何计算ArrayList中的重复元素? 7个答案 我不能像使用Array.sort()那样修改数组的内容。 该代码的预期返回值为6,因为存在三个重复的值1,一个重复的值2,以及两个重复的值4。但是我的显示为10。我知道它为什么是10:它在计
6回复

检查整数的数量是否正在增加(java)

我想要做的应该很简单,但是由于我是 Java 新手,我正在为可能是基本编程的内容而苦苦挣扎。 主要问题是如何检查整数的 (x+1) 数是否大于 x 数,我正在尝试按如下方式执行: 但它返回一个错误“需要数组但找到整数”。 这似乎是一个基本类型错误,可能来自上一步(仅保留字符串中包含的数字): 我在网
2回复

从不确定的数量中找出所有可能的组合

给定一个清单; List<List<SomeType>>其中内部列表可以是任何大小,外部列表将是传递给函数的变量的大小,我需要找到包含元素的所有可能组合。 因为我的解释可能很糟糕,所以这里有一个示例输入和输出。 输入: 输出: 我完全不知道如何完成这项工作。 我简直无法理解
3回复

加数组的数量直到确定值

对于练习,我必须添加数组的值,直到达到某个值为止,并显示所有可能的组合。 示例:值= 4,数组= {1,2,3} 可能的组合为:1 + 1 + 1 + 1、1 + 1 + 2、1 + 2 + 1、1 + 3、2 + 1 + 1、2 + 2、3 + 1 但是,我的代码似乎不起作用: