如何确定重复整数的数量及其数量?

时间:2015-03-31 13:01:14

标签: java arrays

我试着写一个程序来确定一个数组中重复整数的数量和它们的计数,但是程序输出大致完全,所以我的问题是我的代码中的问题我不想使用任何类,谢谢。< / p>

例如:

输入: 输入数组大小: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 ");
            }
        }
    }
}

5 个答案:

答案 0 :(得分: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实施。

答案 1 :(得分: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 ");
        }
    }
}

}

答案 2 :(得分:0)

您的代码似乎没问题,但是对于一个小问题。当您输出出现次数时,无论是否之前已经检查过当前正在检查的值,您每次都要遍历整个数组。简而言之,对于[1,1,1,1,2,2,2,3,3]的输入数组,输出为1:4倍,1:3倍和1:2倍等等。

我认为您需要将不同的值与已排序的数组分开,或者至少确保不对已经计数的值重复计数。

答案 3 :(得分:0)

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

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

这应该足够了,希望有所帮助

答案 4 :(得分:0)

当我们拿钥匙找到发生时,首先我们需要检查它是否已被搜索出现(例如.4)。所以我把密钥保存在数组中没有任何重复,然后开始搜索它。可以使用集合方法轻松完成..

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 ");
            }
        }

    }
}

输出附在屏幕截图中。enter image description here