2

仍在尝试使用 Java 进行编程,下面是我已经提交给大学的多种方法的最近作业的代码。

我的问题是,是否可以简化代码以使其更有效,而不是通过更长的路线进行处理。

1:打印数组的最大值。
2:打印数组的最小值。
3:打印Array的平均值。
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

使其更有效:

您总是可以在这里使用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你可能想要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

getMaximum您可以将,getMinimum和的逻辑部分放在getAverage同一个循环中(与另一个循环相同getFrequencygetAverageWordLength,如下所示:

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 回答