【问题标题】:Java Program not working in order that I had hoped? [closed]Java 程序没有按照我希望的顺序运行? [关闭]
【发布时间】:2014-08-19 13:12:07
【问题描述】:

我正在为成绩计算器和 GPA 计算器制作程序。在我的 GPA 计算器中,我有代码来获取他们为课程输入的成绩,它会根据他们在点击计算时输入的内容显示字母成绩。然后我在计算中使用显示的字母等级进行一些数学运算。当我运行程序时,它一直返回 0,尽管获取字母等级的代码在我的代码中非常靠前,而其他数学是接近尾声的方法。

if(Double.parseDouble(txt11.getText()) < 50){
                txt12.setText("F");
} else if(Double.parseDouble(txt11.getText()) >= 50 && Double.parseDouble(txt11.getText()) <= 59){
                    txt12.setText("D");
} else if(Double.parseDouble(txt11.getText()) >= 60 && Double.parseDouble(txt11.getText()) <= 64){
                    txt12.setText("C");
} else if(Double.parseDouble(txt11.getText()) >= 65 && Double.parseDouble(txt11.getText()) <= 69){
                    txt12.setText("C+");
} else if(Double.parseDouble(txt11.getText()) >= 70 && Double.parseDouble(txt11.getText()) <= 74){
                    txt12.setText("B");
} else if(Double.parseDouble(txt11.getText()) >= 75 && Double.parseDouble(txt11.getText()) <= 79){
    txt12.setText("B+");
} else if(Double.parseDouble(txt11.getText()) >= 80 &&           Double.parseDouble(txt11.getText()) <= 84){
                    txt12.setText("A");
} else if(Double.parseDouble(txt11.getText()) >= 85){
                    txt12.setText("A+");
}

这是我不断返回 0 的方法。

public double getGP(JTextField a){
    double b = 0.0;
    if(a.getText().equals("A")){
       b = 4.0;
    } else if(a.getText().equals("B+")){
       b = 3.5;
    } else if(a.getText().equals("B")){
       b = 3.0;
    } else if(a.getText().equals("C+")){
       b = 2.5;
    } else if(a.getText().equals("C")){
       b = 2.0;
    } else if(a.getText().equals("D")){
       b = 1.0;
    } else if(a.getText().equals("F")){
       b = 0.0;
    }
        return b;
}

【问题讨论】:

  • 你试过使用调试器吗?
  • 你在哪里打电话getGP(JTextField a)
  • 那么,您是否通过调试器运行它以查看 a.getText() 实际返回的内容?

标签: java methods return


【解决方案1】:

首先,让我们修复getGP()。获取文本一次,然后对其进行修剪并调用toUpperCase()。最后,您可以使用类似的方式消除本地 double

public double getGP(JTextField a) {
    // Don't forget, this needs to be txt12 (not txt11).
    String str = a.getText();
    str = (str != null) ? str.trim().toUpperCase() : "";
    if (str.equals("A")) {
        return 4.0;
    } else if (str.equals("B+")) {
        return 3.5;
    } else if (str.equals("B")) {
        return 3.0;
    } else if (str.equals("C+")) {
        return 2.5;
    } else if (str.equals("C")) {
        return 2.0;
    } else if (str.equals("D")) {
        return 1.0;
    }
    return 0.0;
}

然后我们可以更新你的字母等级代码,它可以通过解析一次数字来极大地简化,并且只有在前面的 if 为 false 时才会评估 else (所以你可以使用)-

Double val = Double.parseDouble(txt11.getText());
if (val < 50) {
    txt12.setText("F");
} else if (val <= 59) {
    txt12.setText("D");
} else if (val <= 64) {
    txt12.setText("C");
} else if (val <= 69) {
    txt12.setText("C+");
} else if (val <= 74) {
    txt12.setText("B");
} else if (val <= 79) {
    txt12.setText("B+");
} else if (val <= 84) {
    txt12.setText("A");
} else {
    txt12.setText("A+");
}

【讨论】:

  • 如果是这样的确定性,我个人会使用等级/价值地图。
  • 我很欣赏代码修复,但它不能解决我的问题,getGP 总是返回 0.0,即使字母等级设置得比我调用该方法的地方高。
  • @Kalkrin 记录字母等级。不能按你想的那样设置。
  • @Kalkrin in the functoin getGP 你省略了我想的“A+”的情况。
  • @gaemaf 这实际上是问题所在,因为当我测试它时,我只是在 85 中折腾 .. 这是 A+,所以它只是返回默认的 0.0。愚蠢的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 2023-03-04
  • 2022-11-22
  • 2016-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多