【问题标题】:Calculate Average Java计算平均 Java
【发布时间】:2015-01-07 06:31:25
【问题描述】:

我正在尝试计算学生分数的平均值,就目前而言,我正在努力解决计算部分。

在我的作业中,我被要求计算三个学生的平均年龄和平均年龄。三个学生的身高。

有人可以在这段代码的最后一行指导我吗,我为新手问题道歉,真的卡住了,无法想出任何解决方案来解决为什么它不计算我的数字。

public static void main(String[] args) {
// this method will display the scores of students 

//variable declaration
int JasperAge = 20; 
int JasperHeigth = (int) 175.5;
int PaulaAge = 25; 
int PaulaHeigth = (int) 190.5;
int NicoleAge = 18;
int NicoleHeigth = (int) 165;

//output
Scanner output = new Scanner (System.in);


System.out.println("Name\t "+ " Age\t " + " Height (cm)\t");
System.out.println("\n");
System.out.println("Jasper\t  "+JasperAge+"  \t    "+JasperHeigth);
System.out.println("Paula\t  "+PaulaAge+"  \t    "+PaulaHeigth);
System.out.println("Nicole\t  "+NicoleAge+" \t    "+NicoleHeigth);
System.out.println("Average\t ((20 + 25 + 18) /3) \t ((175.5 + 190.5 + 165) /3)");
}

}

【问题讨论】:

  • 你没有做任何计算;最后一行只打印一个字符串。
  • 你为什么要把非常好的双打投射到整数?
  • 如果你变量,你应该使用它们——不要重复它们的值!
  • int JasperHeigth = (int) 175.5; 没有意义。如果是整数,则只分配一个整数:int JasperHeigth = 175;。此外,变量通常应以首字母小写命名。

标签: java math arithmetic-expressions


【解决方案1】:

Java 是一种面向对象的语言。您可能才刚刚开始,但学习封装永远不会太早:

public class Student {
    private final String name;
    private final int age;  // bad idea - why?
    private final double heightInCm;

    public Student(String n, int a, double h) {
        this.name = n;
        this.age = a;
        this.heightInCm = h;
    }

    public String getName() { return this.name; }
    public int getAge() { return this.age; }
    public double getHeightInCm() { return this.heightInCm; }

    public String toString() {
        return String.format("name: '%s' age: %d height: %10.2f (cm)", this.name, this.age, this.heightInCm);
    }
}

【讨论】:

  • 非常感谢您!我刚刚开始使用 Java,并享受其中的每一点。在 sof 上阅读其他人的问题很有帮助,像你这样的人非常有帮助!分享知识,希望有一天我能够与他人分享我的知识
【解决方案2】:

有几点不对:

int JasperHeigth = (int) 175.5;
int PaulaHeigth = (int) 190.5;
int NicoleHeigth = (int) 165;

鉴于这些似乎是带有十进制值的高度,您可能希望将它们存储为doubles 而不是ints。当您将像 175.5 这样的值声明为整数时,它实际上会被截断为 175。要存储这些数字的完整值,您应该将它们定义为:

    double JasperHeigth = 175.5;
    double PaulaHeigth = 190.5;
    double NicoleHeigth = 165;

旁注:您必须使用 (int) 转换这些数字的原因是因为 175.5 实际上是 double 文字而不是 int,这是您像以前一样声明变量的内容。

接下来,这个扫描器定义行永远不会被使用:

Scanner output = new Scanner (System.in);

您将使用Scanner 类来获取用户的输入。例如,如果您希望用户输入一些姓名或数字。在这种情况下,您似乎不需要向用户请求任何输入,因此可以删除此行。

最后,显示输出的问题出在这一行:

System.out.println("Average\t ((20 + 25 + 18) /3) \t ((175.5 + 190.5 + 165) /3)");

问题在于,通过将数字括在引号中,您预期的算术将不会被评估,而只会作为字符数据显示给用户。如果您想评估这些表达式,您可以将数学运算从引号中提取出来,并使用 + 运算符将它们连接到字符串数据:

System.out.println("Average\t" +  ((20 + 25 + 18) /3) + "\t" + ((175.5 + 190.5 + 165) /3));

但是,这仍然存在一些问题。首先,((20 + 25 + 18) /3) 将评估为整数除法。它将减少到63/3,即21。但是,如果您有64/365/3,它也会显示21,因为整数除法会截断小数点后的数字部分。为防止截断您想要的结果,您可以将分子或分母中的任一数字转换为双精度数,或除以双精度字面量,例如 3.0。所以是这样的:

System.out.println("Average\t" +  ((20 + 25 + 19) /3.0) + "\t" + ((175.5 + 190.5 + 165) /3.0));

最后,这些数字实际上都没有使用您之前定义的变量,它们是完全独立的。如果您想实际平均变量,则需要将它们替换为如下表达式:

System.out.println("Average\t" +  ((JasperAge + PaulaAge + NicoleAge) /3.0) + "\t" + ((JasperHeigth + PaulaHeigth + NicoleHeigth) /3.0));

总结

这是一个包含我所有建议编辑的程序:

public static void main(String[] args) {
    // this method will display the scores of students

    //variable declaration
    int JasperAge = 20;
    double JasperHeigth = 175.5;
    int PaulaAge = 25;
    double PaulaHeigth = 190.5;
    int NicoleAge = 18;
    double NicoleHeigth = 165;

    System.out.println("Name\t "+ " Age\t " + " Height (cm)\t");
    System.out.println("\n");
    System.out.println("Jasper\t  "+JasperAge+"  \t    "+JasperHeigth);
    System.out.println("Paula\t  "+PaulaAge+"  \t    "+PaulaHeigth);
    System.out.println("Nicole\t  "+NicoleAge+" \t    "+NicoleHeigth);
    System.out.println("Average\t" +  ((JasperAge + PaulaAge + NicoleAge) /3.0) + "\t" + ((JasperHeigth + PaulaHeigth + NicoleHeigth) /3.0));
}

【讨论】:

  • 您的回复非常有帮助,我从中学到了很多。非常感谢您的回答,我刚开始学习 Java,您给了我额外的动力,让我继续朝这个方向学习。非常感谢!
【解决方案3】:

您只需像这样进行最后一次打印:

System.out.println("Average\t  " + ((20 + 25 + 18) /3) + "\t    " + ((175.5 + 190.5 + 165) /3));

甚至更好地使用你的变量:

System.out.println("Average\t  " + ((JasperAge + PaulaAge + NicoleAge) /3) + "\t    " + ((JasperHeigth + PaulaHeigth + NicoleHeigth) /3));

【讨论】:

  • 真的很丑,并且纵容糟糕的代码,但回答了这个问题。
  • 您应该解释 OP 做错了什么,并且由于四舍五入,只是一个仅供参考的年龄平均值是错误的。 P.S.:+1 因为它回答了这个问题。
  • 最好使用已经用这些值定义的变量。
  • 你只是在写我已经给出的答案吗? :)
【解决方案4】:

你的最后一行应该是这样的:

System.out.println("Average age: " + ((JasperAge + PaulaAge + NicoleAge) /3) + ". Average height: " +  ((JasperHeigth + PaulaHeigth + NicoleHeigth) /3) ".");

请注意我的计算,但你明白了。

【讨论】:

  • @Jake Zywiol:请注意,我使用了您声明和初始化的变量。
  • 此外,变量应以小写字母开头,如下所示:lowerCase,有关详细信息,请参阅Java naming conventions
  • 还要考虑@Makoto 的评论。
  • 当您使用它时,您可以使用 String.format()。 System.out.println(String.format("Average age: %d. Average height: %0.2f.", ((JasperAge + PaulaAge + NicoleAge) /3), ((JasperHeigth + PaulaHeigth + NicoleHeigth) /3)) );.