如何将这些整数传递给下面的方法?

时间:2014-12-12 23:58:51

标签: java arrays class methods multiple-instances

我在这里迷惑自己。我的目标是制作一个简单的程序,它接受用户想要平均的值的数量,将它们存储在一个数组中(同时将它们加在一起),最后给出这些数字的平均值。

我的意思是,我试图理解多个类和方法的概念,因为我是新手,所以我尝试使用另一个类只做了所有工作,而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方法运行它时,它不起作用。我怀疑我可能错误地传递整数?我现在已经玩弄了大约一个小时,所以我正在寻求帮助。我如何使这项工作?

1 个答案:

答案 0 :(得分:3)

如果您将sumgivenNum声明为OtherClass的字段,而不是局部变量,则此方法有效。因此,在collectNumbers方法之前,写下

private int sum;
private int givenNum;

并删除collectNumbers中这两个变量的声明。所以,例如,而不是

int givenNum = sc.getInt();

你只是

givenNum = sc.getInt();

因为变量已经存在。同时将averageNumbers方法的声明更改为

public int averageNumbers()

因为您不再需要将这两个值传递给此方法。

这是使用类的对象来携带少量数据的典型示例,而不是仅仅使用类作为将方法组合在一起的方法。此类的两个方法适用于sumgivenNum,因此将它们存储在此类的每个对象中都是有意义的。

最后,在您的averageNumbers方法中,您有一个整数除法,它会自动向下舍入。你可能想要一个浮点除法,所以你可以写

double average = (double) sum / givenNum;

在分割之前将sum转换为双精度浮点数,因此以浮点进行除法,而不是仅使用整数。当然,如果您进行此更改,则您还需要将此方法的返回类型更改为double