2

まだJavaでプログラミングを理解しようとしていますが、以下は、私がすでに大学に提出した複数のメソッドでの最近の割り当てのコードです。

私の質問は、コードを合理化して、より長いルートを経由するのではなく、より効果的にすることは可能ですか?

1:配列の最大値を出力します。
2:配列の最小値を出力します。
3:配列の平均値を出力します。
4:文字列内の特定の単語の出現回数を出力します。
5:文字列の平均単語長を出力します。

public class MaxMinAverage {
static int[] values = {1, 4, 3, 57, 7, 14, 7, 3, 10, 5, 4, 4, 10, 5, -88};
static String sentence = "the cat sat on the mat and the dog sat on the rug";
public static void main(String[] args) {
    System.out.println("MaxMinAverage.java\n=====================");
    System.out.println("Maximum value = "+getMaximum(values));
    System.out.println("Minimum value = "+getMinimum(values));
    System.out.println("Average Value =" +getAverage(values));
    System.out.println("Frequency of 'the' = "+getFrequency(sentence,"the"));
    System.out.println("Average word length = "+getAverageWordLength(sentence));
    }
    public static int getMaximum(int[]arr){
        int max = 0;
        for(int i = 0; i < values.length; i++){
            if(values[i] > max){
                    max = values[i];
                    }
            }
        return max;
     }
    public static int getMinimum(int[] arr){
        int min = 0;
        for(int i = 1; i < values.length; i++){
            if(values[i] < min){
                    min = values[i];
                    }
            }
        return min;
    }
    public static float getAverage(int[] arr){
        float result = 0;
        for(float i = 0; i < values.length; i++){
             result = result + values[(int) i];
        }
        return result/values.length;
     }
    public static int getFrequency(String sentance, String word){
        String keyword = "the";
        String[] temp;
        String space = " ";
        temp = sentence.split(space);
        int counter = 0;
        for(int i = 0; i < temp.length; i++){
            if(temp[i].equals(keyword)){
                counter++;
            }
        }
        return counter;
    }
    public static float getAverageWordLength(String sentance){
        String characters = sentence.replaceAll("\\W","");
        float total = characters.length();
        float result = 0;
        String[] temp;
        String space = " ";
        temp = sentence.split(space);
        for(int i = 0; i < temp.length; i++){
            result++;   
        }
        return total/result;
    }
}
4

3 に答える 3

0

あなたはgetMaximumおそらくしたいですint max = Integer.MIN_VALUE; そしてgetMinimumあなたが欲しいint min = Integer.MAX_VALUE;。それ以外の場合getMaximum、配列内のすべての要素がゼロ未満の場合は0を返し(したがって、配列内にない値を返す)、getMinimumではすべての要素がゼロより大きい場合(これも間違っています)は0を返します。

また、getMinimumインデックス1からの反復を開始すると、インデックス0を見逃すことになります。

さらに、メソッドのパラメーターは使用せず、values配列を直接使用します。あなたが呼び出しgetMinimum(someOtherArray)たとしましょう、あなたはまだで計算しvaluesます。代わりに、次のようにパラメータとして指定された配列を反復処理する必要があります。

public static int getMinimum(int[] arr){
    int min = Integer.MAX_VALUE;
    for(int i = 0; i < arr.length; i++){
        if(arr[i] < min){
                min = arr[i];
        }
    }
    return min;
}

もちろん、これはすべてのメソッドに対して実行する必要があります。

于 2012-12-04T10:00:41.057 に答える
0

より効果的にする:

ここではいつでもDRY(自分自身を繰り返さないでください)を使用してクラスを作成し、ArrayUtilsこれらすべてのメソッドをそこに保持して、それらを一般化して再利用できるようにすることができます。

public static int getMinimum(int[] arr){
        int min = arr[0];  //change here
        for(int i = 1; i < values.length; i++){
            if(values[i] < min){
                    min = values[i];
                    }
            }
        return min;
    }

maxメソッドの同様の変更

于 2012-12-04T09:47:55.513 に答える
0

getMaximum次のように、getMinimumとの論理部分をgetAverage同じループ (同じ forgetFrequencygetAverageWordLength別のループ) に入れることができます。

public static void getMinMaxAvg(int[] values) {
    if (values == null || values.length == 0) {
        throw new IllegalArgumentException();
    }
    int min = values[0];
    int max = values[0];
    int i = 1;
    int sum = 0;
    for (i = 1; i < values.length; i++) {
        if (values[i] < min) {
            min = values[i];
        } else if (values[i] > max) {
            max = values[i];
        }
        sum += values[i];
    }
    System.out.println("min = " + min);
    System.out.println("max = " + max);
    System.out.println("avg = " + ((float) sum / (i + 1)));
}

public static void getFreqAvg(String sentence, String word) {
    if (sentence == null || sentence.isEmpty()) {
        throw new IllegalArgumentException();
    }
    if (word == null || word.isEmpty()) {
        throw new IllegalArgumentException();
    }
    String[] words = sentence.replaceAll("^ *(.*?) *$", "$1").split(" +");
    int freq = 0;
    int sum = 0;
    int i = 0;
    for (i = 0; i < words.length; i++) {
        if (words[i].equalsIgnoreCase(word)) {
            freq++;
        }
        sum += words[i].length();
    }
    System.out.println("freq of \"" + word + "\" = " + freq);
    System.out.println("avg word length = " + ((float) sum / (i + 1)));
}

public static void main(String[] args) {

    int[] values = { 1, 4, 3, 57, 7, 14, 7, 3, 10, 5, 4, 4, 10, 5, -88 };
    String sentence = " the  cat sat on the mat and the dog sat on the rug ";
    String word = "the";

    getMinMaxAvg(values);
    getFreqAvg(sentence, word);

}

版画:

min = -88
max = 57
avg = 2.8125
freq of "the" = 4
avg word length = 2.642857
于 2012-12-04T10:12:05.297 に答える