1

配列を並べ替えて配列要素を数えようとしましたが、欠落しているものを見つけるのを手伝ってください。何度もデバッグしました。ここに私のコードと私が得た出力があります。ありがとう

package habeeb;

import java.util.*;

public class Habeeb {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] num = new int[30];
        int i, count=0;

        System.out.println("Enter the integers between 1 and 100" );

        for( i=0; i<num.length; i++){
            num[i]= input.nextInt();
            if(num[i]==0)
                break;
            count++;
        }

ここで関数を呼び出します

        Sorting(num, i, count);
    }

    public static void Sorting(int[] sort, int a, int con){
        if (a<0) return;
 /*am sorting the array here*/
        Arrays.sort(sort); 
        int j, count=0;

        for(j=0; j<con; j++){
            if(sort[a]==sort[j])
                count++;
        }

        System.out.println(sort[a]+" occurs "+count+" times"); 
        Sorting(sort, a-1, con);
    }
}

出力は次のとおりです。

run:
Enter the integers between 1 and 100
2
5
4
8
1
6
0
0 occurs 6 times
0 occurs 6 times
0 occurs 6 times
0 occurs 6 times
0 occurs 6 times
0 occurs 6 times
0 occurs 6 times
4

3 に答える 3

3

問題は、配列のサイズが 30 であり、並べ替えると、割り当てていないすべての値が 0 になるため、並べ替えられた配列の前に配置されることです。後で最初の 6 つの数字のうちすべてが 0 になるため、出力は正しいものになります。

直面する問題を回避するArrayListために、要素を動的に追加できるように、単純な配列の代わりに使用することをお勧めします。

于 2013-04-11T13:06:40.173 に答える
2

これを試して

カウント方法

public int count(int[] values, int value)
{
    int count = 0;
    for (int current : values)
    {
        if (current == value)
            count++;
    }
    return count;
}

次に使用します

int[] sorted = Arrays.sort(num);
for (int value : sorted)
{
    System.out.println("" + value + " occurs " + count(sorted, value) + " times");
}

これは確実に機能します。

于 2013-04-11T13:15:44.573 に答える