2015-09-21 48 views
3

我想调用getAverage和getHighest到我的驱动程序类,并将它们打印在屏幕上。但是,我不断收到垃圾值。任何想法这个程序有什么问题?谢谢打印数组的平均值和最高值

public class ArrayOperations 
{ 
    public double getAverage(int[] array) 
    { 
     double total = 0; 
     double average; 

     for (int index = 0; index < array.length; index++) 
      total += array[index]; 

     average = total/array.length; 
     System.out.println("The average is: " + average); 
     return average; 
    } 

    public int getHighest(int[] array) 
    { 
     String output = new String(""); 
     int highest = array[0]; 
     for(int i = 1; i < array.length; i++) 
     { 
      if (array[i] > highest) 
       highest = array[i]; 
      System.out.println("The highest score=" + highest); 
     } 
     return highest; 
    } 
} 

Driver类:

public class ArrayOperationDriver 
{ 
    public static void main(String[] args) 
    { 
     int [] testScores = {80, 90, 58, 75, 85, 45, 68, 72, 95}; 
     ArrayOperations object = new ArrayOperations(); 
     System.out.println(object); 
    } 
} 
+0

由于您正在使用输入对象调用'System.out.println',您没有重写'toString()',所以您正在获取“垃圾”值。你也没有调用你在'ArrayOperations'上定义的方法' – mkobit

+0

@tommy你可以检查你的对象的'toString()'方法的Javadoc(它基本上是'Object'类的'toString()'方法)看明白为什么.. –

+0

这些答案都没错;然而,我可能会使这些方法是静态的,因为它们只依赖于输入参数,并且不会修改任何状态(这些将被称为“纯函数”)。 –

回答

0

选项1:

的“垃圾”值你要在哪里object所在的存储位置。相反,调用的方法:

System.out.println(object.getAverage(testScores)); 
System.out.println(object.getHighest(testScores)); 

我会添加一个修改你的代码,所以它不会打印大量的“最高值是:”

public int getHighest(int[] array) { 
    String output = new String(""); 
    int highest = array[0]; 
    for(int i = 1; i < array.length; i++) { 
     if (array[i] > highest) 
      highest = array[i]; 
      //Removed from here 
      //System.out.println("The highest score=" + highest); 
    } 
    //Moved to here 
    System.out.println("The highest score=" + highest); 
    return highest; 
} 

选项2:

但是,因为您已经在方法中打印了内容,所以我会将它们更改为void并取消return语句。具体如下:

public class ArrayOperations { 
    public void getAverage(int[] array) { 
     double total = 0; 
     double average; 
     for (int index = 0; index < array.length; index++) 
      total += array[index]; 

     average = total/array.length; 
     System.out.println("The average is: " + average); 
    } 

    public void getHighest(int[] array) { 
     String output = new String(""); 
     int highest = array[0]; 
     for(int i = 1; i < array.length; i++) { 
      if (array[i] > highest) 
       highest = array[i]; 
     } 
     System.out.println("The highest score=" + highest); 
    } 
} 

,并调用方法是这样的:

public class ArrayOperationDriver { 
    public static void main(String[] args) { 
     int [] testScores = {80, 90, 58, 75, 85, 45, 68, 72, 95}; 
     ArrayOperations object = new ArrayOperations(); 
     object.getAverage(testScores); 
     object.getHighest(testScores); 
    } 
} 

我想这是做一个更清洁的方式。

方案3:

而且多一个选择这样做会是这样,从你的方法返回的数字,但除去S.o.p从里面他们呼吁。

public class ArrayOperations { 
    public double getAverage(int[] array) { 
     double total = 0; 
     double average; 
     for (int index = 0; index < array.length; index++) 
      total += array[index]; 

     average = total/array.length; 
     return average; 
    } 

    public int getHighest(int[] array) { 
     String output = new String(""); 
     int highest = array[0]; 
     for(int i = 1; i < array.length; i++) { 
      if (array[i] > highest) 
       highest = array[i]; 
     } 
     return highest; 
    } 
} 

,并把他们的主要方法中:

public class ArrayOperationDriver { 
    public static void main(String[] args) { 
     int [] testScores = {80, 90, 58, 75, 85, 45, 68, 72, 95}; 
     ArrayOperations object = new ArrayOperations(); 
     System.out.println("Average number is: " + object.getAverage(testScores)); 
     System.out.println("Highest number is: " + object.getHighest(testScores)); 
    } 
} 

编辑

要打印所有号码数组testScores,你可以做一个简单的for循环或for-each循环,我使用for-each,但如果你想知道如何使用for,你可以用for。

public class ArrayOperationDriver { 
    public static void main(String[] args) { 
     int [] testScores = {80, 90, 58, 75, 85, 45, 68, 72, 95}; 
     ArrayOperations object = new ArrayOperations(); 
     System.out.println("Average number is: " + object.getAverage(testScores)); 
     System.out.println("Highest number is: " + object.getHighest(testScores)); 

     System.out.print("The test scores are: "); 
     for (int score : testScores) 
      System.out.print(score + " "); 
     System.out.println(""); 
    } 
} 
+0

好的,谢谢。我现在能够按照我想要的打印平均值和最高值。你有什么想法如何在驱动程序类中打印testScores? – VNrutgib

+0

我想用System.out.println打印它(测试成绩是:“+ testScores);但这不适用于我 – VNrutgib

+0

@tommyb将它们打印在lopp中,请参阅编辑 – Frakcool

1

你不力调用anywhere.Just做

System.out.println(object.getAverage(testScore)); 
System.out.println(object.getHighest(testScore)); 

与您的代码你只是打印,让你的字符串表示的对象的方法该对象。

0

你是不是叫getAveragegetHighest。您只是打印ArrayOperations,实际上这称为ArrayOperations.toString()。由于您没有覆盖它,因此您将获得默认实现,该实现将打印类名称及其默认实现。

最好的做法是从ArrayOperations'方法中删除打印并返回结果。打印应该由调用者(驱动程序)类来处理。这样,如果调用者想要对结果做其他事情(例如,将其显示在网页中,将其保存到数据库中,执行另一次计算),则可以。

public class ArrayOperationDriver 
{ 
    public static void main(String[] args) 
    { 
     int [] testScores = {80, 90, 58, 75, 85, 45, 68, 72, 95}; 
     ArrayOperations object = new ArrayOperations(); 
     System.out.println 
      ("The average score is: " + object.getAverage(testScores)); 
     System.out.println 
      ("The highest score is: " + object.getHighest(testScores)); 
    } 
} 
相关问题