我在这里迷惑自己。我的目标是制作一个简单的程序,它接受用户想要平均的值的数量,将它们存储在一个数组中(同时将它们加在一起),最后给出这些数字的平均值。
我的意思是,我试图理解多个类和方法的概念,因为我是新手,所以我尝试使用另一个类只做了所有工作,而Main类只是从其他类创建对象,然后运行他们的方法。也许我在问一些不可能的事情。看看我的代码。
这是我的主要课程:
public class Main
{
public static void main(String[] args)
{
System.out.println("Please enter numbers to average together");
OtherClass averages = new OtherClass();
averages.collectNumbers();
averages.AverageNumbers();
}
}
现在我不确定这些参数是否有任何内容,或者我是否可以使用“averages.AverageNumbers();”没有用“OtherClass”创建另一个被称为别的东西?我很确定这是合法的。
这是我的另一个名为“OtherClass”
的项目import java.util.Scanner;
public class OtherClass // using this to name obj
{
public void collectNumbers() //name of our method that does things
{
Scanner sc = new Scanner(System.in);
System.out.println("how many integers would you like to average? ");
int givenNum = sc.nextInt();
System.out.println("Alright, I will average " + givenNum + " values. \nPress enter after each:");
int[] numCollect = new int[givenNum];
int sum = 0;
for (int i = 0; i < numCollect.length; i++)
{
numCollect[i] = sc.nextInt();
sum = sum + numCollect[i];
}
System.out.println(sum);
}
public int AverageNumbers(int givenNum, int sum)
{
int average = sum / givenNum;
System.out.println(average);
return average;
}
}
因此,当我现在使用AverageNumbers方法运行它时,它不起作用。我怀疑我可能错误地传递整数?我现在已经玩弄了大约一个小时,所以我正在寻求帮助。我如何使这项工作?
答案 0 :(得分:3)
如果您将sum
和givenNum
声明为OtherClass
的字段,而不是局部变量,则此方法有效。因此,在collectNumbers
方法之前,写下
private int sum;
private int givenNum;
并删除collectNumbers
中这两个变量的声明。所以,例如,而不是
int givenNum = sc.getInt();
你只是
givenNum = sc.getInt();
因为变量已经存在。同时将averageNumbers
方法的声明更改为
public int averageNumbers()
因为您不再需要将这两个值传递给此方法。
这是使用类的对象来携带少量数据的典型示例,而不是仅仅使用类作为将方法组合在一起的方法。此类的两个方法适用于sum
和givenNum
,因此将它们存储在此类的每个对象中都是有意义的。
最后,在您的averageNumbers
方法中,您有一个整数除法,它会自动向下舍入。你可能想要一个浮点除法,所以你可以写
double average = (double) sum / givenNum;
在分割之前将sum
转换为双精度浮点数,因此以浮点进行除法,而不是仅使用整数。当然,如果您进行此更改,则您还需要将此方法的返回类型更改为double
。