我正在尝试调用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;
}
}
驱动类:
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);
}
}
你不能在任何地方调用这些方法。只做
System.out.println(object.getAverage(testScore));
System.out.println(object.getHighest(testScore));
在你的代码中,你只是打印对象,它给了你该对象的字符串表示。
选项1:
你得到的"垃圾"值是object
所在的内存位置。而是调用以下方法:
System.out.println(object.getAverage(testScores));
System.out.println(object.getHighest(testScores));
我将在你的代码中添加一个修改,这样它就不会打印大量的"The highest value is:"
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:
还有一个选择是,从你的方法中返回数字,但从它们内部删除sop调用。
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;
}
}
并将它们放入main方法中:
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。
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("");
}
}
您没有调用getAverage
或getHighest
。您只是打印ArrayOperations
,它实际上调用ArrayOperations.toString()
。因为没有重写它,所以得到的是默认实现,它打印类名及其默认的hashCode()
实现。
最佳实践是从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));
}
}