0

配列の中央値コードに使用している 2 つのファイルがあります。最初のファイル (ArrayMedian.java) は中央値を収集して計算するために使用され、2 番目のファイルはテスター ファイル (ArrayMedianTest.java) です。

いくつかのソース コードが提供され、データセット内の各数値の設定範囲を受け入れるように変更する必要がありました。その部分が完了し、ランダムな範囲が表示されましたが、配列に到達すると計算が行われなくなり、何が問題なのか本当にわかりません。

私がやろうとしているもう1つのことは、ArrayMedianにあります。そこにwhileループを入れて、データセットに「0」が入力された場合に終了させますが、そのファイルで動作したくないようです。ファイルにメインがないためですか?

package bonus2.u06.exercise.ex3;

import java.util.Scanner;

public class ArrayMedian {

    private int[] arr;  // just declare array
    Scanner keyboard;   // shared field 

    // initialize keyboard and array
    public void init() {
        keyboard = new Scanner( System.in );    
        System.out.print("Enter the dataset size: ");

        int size = keyboard.nextInt(); // must be odd number
        arr = new int[ size ];   // instantiate 
    }

    // Randomize the array
    public void getRange() {        
        //System.out.println("\nYou entered: ");
        System.out.print("Enter a Range: ");
        int range = keyboard.nextInt(); 

        System.out.print("array: \n");
        for(int i = 0; i < arr.length; i++){
            int myRnd = (int)( range * Math.random() );

            System.out.print(" " + myRnd + " ");
        }
    }

    // find the median of array
    public int calcMedian() {
        int half_length = arr.length/2;

        for (int i = 0; i < arr.length; i++) {

            int count = 0;

            for (int j = 0; j < arr.length; j++) {
                if (arr[i] > arr[j])
                    count++;
            }
            if (count == half_length) {
                 //<=========  terminate this method
                return arr[i];
            }

        }

        return 0;   
    }

}

ArrayMedianTest:

package bonus2.u06.exercise.ex3;

public class ArrayMedianTest {

    public static void main(String args[]) {
        // instantiate 
        ArrayMedian obj = new ArrayMedian();
        // execute all methods 
        obj.init();
        obj.getRange();

        int median = obj.calcMedian();
        System.out.println("\nmedian : " + median);

        System.out.println("\n--- done ---");
    }   

}
4

1 に答える 1

1

結局のところ、アルゴリズムは完全に正常に機能しますが、getRange()メソッドを除いて、配列の値を設定するのを忘れたため、配列はゼロの配列です。これがどのように見えるかです:

public void getRange() {        
    //System.out.println("\nYou entered: ");
    System.out.print("Enter a Range: ");
    int range = keyboard.nextInt(); 

    System.out.print("array: \n");
    for(int i = 0; i < arr.length; i++){
        int myRnd = (int)( range * Math.random() );

        System.out.print(" " + myRnd + " ");
        arr[i] = myRnd; // <-- You missed this line right here!
    }
}

また、推奨事項として、コードを stackoverflow に配置する場合は、行頭に 4 のスペースと、使用する可能性のあるインデントが必要です。頑張れプログラミング!

于 2013-10-14T01:15:51.007 に答える