【问题标题】:Where is my code going wrong? [closed]我的代码哪里出错了? [关闭]
【发布时间】:2015-03-13 14:36:24
【问题描述】:

编辑:

我想我复制了一些错误的代码!

public class GradeCalculator {

 public static void calculateGrade(int mark) {
  if (mark >= 70) System.out.println("grade = A");
  if (mark >= 60) System.out.println("grade = B");
  if (mark >= 50) System.out.println("grade = C");
  if (mark >= 40) System.out.println("grade = D");
  if (mark <  40) System.out.println("grade = F");
 }

 public static void main(String[] args) {

 }
}

我才刚刚开始尝试 Java(或任何编程)。我正在通过练习题来解决问题。我有这段代码,需要在 main 方法中编写语句来测试它。

我该怎么做?

感谢您提供正确方向的任何帮助/指示。

标记

【问题讨论】:

  • 你的代码无法编译,伙计。
  • 如果您的代码中有错误,您应该做的第一件事是使用您的调试器找出您的程序为什么会这样做。我还建议您在 IDE 中使用重新格式化程序。顺便说一句,您可以将上面的代码变成 1 行。

标签: java methods main statements


【解决方案1】:

您需要从main 调用该方法。我强烈建议您阅读very basic Java tutorial,您缺少一个非常基本的概念。

完成此操作后,您需要拥有else。在您的情况下,如果满足第一个 if ,则将满足以下 ifs 。

想一想,if (mark &gt;= 70) 然后肯定是if (mark &gt;= x) 任何x &lt;= 70

【讨论】:

    【解决方案2】:

    好吧,为了开始这场闹剧,让我们将您的代码编辑成可以以一种合理的方式编译和工作的东西:

    public class GradeCalculator {
    
        public static void claculateGrade (int mark) {
            if (mark >= 70) System.out.println("grade = A");
            else if (mark >= 60) System.out.println("grade = B");
            else if (mark >= 50) System.out.println("grade = C");
            else if (mark >= 50) System.out.println("grade = D");
            else if (mark >= 40) System.out.println("grade = E");    
        }
    
        public static void main (String[] args)  {
    
        }
    
    }
    

    现在,要打印一些人会得到一些分数的成绩,你可以像这样调用你的“claculateGrade”方法:

    public static void main (String[] args)  {
        claculateGrade(55);
    }
    

    这应该将“grade = C”打印到控制台。完整代码:

    public class GradeCalculator {
    
        public static void claculateGrade (int mark) {
            if (mark >= 70) System.out.println("grade = A");
            else if (mark >= 60) System.out.println("grade = B");
            else if (mark >= 50) System.out.println("grade = C");
            else if (mark >= 50) System.out.println("grade = D");
            else if (mark >= 40) System.out.println("grade = E");    
        }
    
        public static void main (String[] args)  {
            claculateGrade(55);
        }
    
    }
    

    现在,可以进一步改进这一点。让我们首先让方法返回成绩:

    public static char getGrade (int mark) {
        if (mark >= 70) return 'A';
        else if (mark >= 60) return 'B';
        else if (mark >= 50) return 'C';
        else if (mark >= 50) return 'D';
        else if (mark >= 40) return 'E';
    
        /* if below 40, return "fail" */
        return 'F';
    }
    

    这会将您的代码更改为:

    public class GradeCalculator {
    
        public static char getGrade (int mark) {
            if (mark >= 70) return 'A';
            else if (mark >= 60) return 'B';
            else if (mark >= 50) return 'C';
            else if (mark >= 50) return 'D';
            else if (mark >= 40) return 'E';
    
            /* if below 40, return "fail" */
            return 'F';
        }
    
        public static void main (String[] args)  {
            System.out.println("Grade: " + getGrade(55));
        }
    
    }
    

    【讨论】:

    • 所以问题是 else if (一旦我在原始问题中发布了我想要的代码!)感谢您的回复。
    【解决方案3】:

    要使您的代码正常工作,您需要调用您的方法,因为您的所有编码都是在该部分完成的,即根据条件进行打印。

    public class GradeCalculator { // This is your class
    
         public static void calculateGrade(int mark) { 
      //This is the method containing conditions
        on the basis of these conditions the corroesponding
       sentences will be  printed
          if (mark >= 70) System.out.println("grade = A");
          if (mark >= 60) System.out.println("grade = B");
          if (mark >= 50) System.out.println("grade = C");
          if (mark >= 40) System.out.println("grade = D");
          if (mark <  40) System.out.println("grade = F");
         }
        //now u need to call the method from your main method.. main method is the entry point of your program so it will start from main then check your method call and do as per the code written there
         public static void main(String[] args) {
        // to call your method just right your method name and enter marks
    
        calculateGrade(50); // you can enter any integer 
         }
        }
    

    【讨论】:

      【解决方案4】:

      您计算等级应该返回等级,而不是打印它。如果你想打印它,调用者可以打印成绩,例如

      public static char calculateGrade(int mark) {
          return "UUUUEDCBAAAA".charAt(mark/10);
      }
      
      System.out.println("Grade = " + calculateGrade(65));
      

      代码的工作方式是利用每个区域都是 10 的倍数这一事实。即除以 10 时得到

      100 -> 10
      90 - 99 -> 9
      80 - 89 -> 8
      70 - 79 -> 7
      60 - 69 -> 6
      50 - 59 -> 5
      40 - 49 -> 4
      30 - 39 -> 3
      20 - 29 -> 2
      10 - 19 -> 1
      0 - 9 -> 0
      

      所以现在所有的数字都变成了 0 到 10 的区域。但是我们希望将等级作为一个字母,以便您得到

      100 -> A
      90 - 99 -> A
      80 - 89 -> A
      70 - 79 -> A
      60 - 69 -> B
      50 - 59 -> C
      40 - 49 -> D
      30 - 39 -> E
      20 - 29 -> U
      10 - 19 -> U
      0 - 9 -> U
      

      【讨论】:

      • 很难看出代码在做什么
      • @OlaviMustanoja 我已经更新了我的答案。是除以 10 不清楚还是在字符串中查找字母不清楚?
      • 对不起,我的评论有点含糊。我的意思是,对于一个明显的初学者来说,这段代码可能有点不知所措。既然你已经解释过了,那就很好了。
      • 我认为我在编辑之前没有看到答案。现在是了,所有回复都有意义(对于一个明显的初学者:))谢谢
      • @OlaviMustanoja 我希望初学者能够弄清楚它的作用,尽管我不希望初学者想象以这种方式编写代码。 ;)