如何使用switch语句的方法内部,使得该方法可以返回这是由它里面的switch语句获取一个char值?

问题描述 投票:0回答:4

此方法是假设计算得到的分数的平均值,并相应地返回等级。我如何通过从交换机()来计算(等级),以便它可以返回正确的档次?

public char calculate(){

    int count=0;
    int total = 0;
     for (int x: testScores){
             total = total + x;
             count++;
     }  

     int grade = total/count;

        switch(grade){
                case (1): if (grade>=90) return 'O';
                break;
                case(2): if (grade>=80 && grade<90) return 'E';
                break;
                case (3): if (grade>=70 && grade<80) return 'A';
                break;
                case (4): if (grade>=55 && grade<70) return 'P';
                break;
                case (5): if (grade>=40 && grade<55) return 'D';
                break;
                case (6): if (grade<40) return 'E';
                break;
            }
            return //what should i return here??

    }

我知道如何做到这一点无需开关(),但我认为这是可以做到这样为好。 PLZ告诉我,我失去了什么?

java methods switch-statement return
4个回答
0
投票

关于你的问题:

  • 不需要最后的回报,刚刚结束switchdefault条款和返回默认值出现。
  • 有没有必要使用break stetements,因为你正在使用return在每种情况下

另外,如果你是限制自己只使用switch,那么这是实现你的目标,一个简单的方法:

char calculate(int[] scores) {
  double averageScore = Arrays.stream(scores).average().getAsDouble();
  int nearestMultipleOfFive = 5 * ((int) averageScore / 5);
  switch (nearestMultipleOfFive) {
    case 100:
    case 95: 
    case 90: return 'O';
    case 85:
    case 80: return 'E';
    case 75: 
    case 70: return 'A';
    case 65: 
    case 60:
    case 55: return 'P';
    case 50: 
    case 45:
    case 40: return 'D';
    default: return 'E';
  }
}

0
投票

既然你覆盖switch语句所有的情况下,你立即为他们每个人的回报,你不应该做任何事情,在那里,你永远达不到的那部分代码。在你目前拥有的break语句的代码也没用,因为它永远不会在任何情况下达到的,因为再次它是由一个return语句预期。

如果你想在年底通过存储交换机案件的结果在先前定义的变量,并返回一个在最后一次返回值可以修改你的代码位。


0
投票

如果您打开最后casedefault而不是实际值,这将消除需要switch语句后返回任何东西。

更广泛地说,每个if里面你case陈述可疑。如何grade == 1grade >= 90?能够工作的只有一个案例6,因为6也是<40.你正在尝试使用1-6作为某种逻辑的标签,但在现实中的JVM grade的值进行比较,以这些数字来决定什么案件执行。

我认为这是表达这种逻辑更简单的方法。它看起来像grade将自己的数字等级(即0的100,虽然在理论上也有可能是负之间),所以我会沟switch声明,只是使用if / else语句:

  if (grade >= 90) {
     return 'O';
  } else if (grade >= 80 && grade < 90) {
     return 'E';
  } else if (grade >= 70 && grade < 80) {
     return 'A';
  } else if (grade >= 55 && grade < 70) {
     return 'P';
  } else if (grade >= 40 && grade < 55) {
     return 'D';
  } else {
     return 'E';
  }

注意最后一句话就是,没有任何条件else。这使得它像一个default声明switch情况下工作:它会赶上不符合其他条件的任何值。


0
投票

在你开关你跳转到不同的部位检查,如果grade是1,2,3,等等。但是,你在它的0至100的范围内比较值?这不能工作了。

但你并不需要一个开关在所有的,你可以使用一系列if语句

public char calculate(){

  int count=0;
  int total = 0;
  for (int x: testScores){
    total = total + x;
    count++;
  }  

  int grade = total/count; //what if count is 0?

  if (grade>=90) return 'O';
  if (grade>=80) return 'E';
  if (grade>=70) return 'A';
  if (grade>=55) return 'P';
  if (grade>=40) return 'D';
  return 'E';
}

并确保覆盖的情况下count为0,我还没有在这里做,因为我不知道应该是什么结果呢。

© www.soinside.com 2019 - 2024. All rights reserved.