2014-03-13 29 views
1

没有其他答案给了我任何迹象表明我在困境中该怎么做,所以我想我会开始一个新的问题。我该如何着手编写这个评分系统?

我想编写一个程序,其中有人输入他们的数量的As,Bs和Cs,然后输出他们的标记。

这是最低要求:

EA: 12 As, 2 Bs 
HA: 6 As, 6 Bs, 2 Cs 
CA: 8 Bs, 5 Cs 
SA: 12 Cs 
PA: 6 Cs 

我已经尝试了几种方法,但没有工作或我要么预见到的代码会非常长,过于复杂。

我遇到的一个主要障碍是我的标准通常会将它分为两​​个等级。

例如:

//EA Grade 

if (numA >= 11 && numB >=1) 
{ grade = "EA"; } 

//HA Grade 

if (numA >=5 && numB >=5) 
{ grade = "HA"; } 

的问题有,如果作为与B的数量符合他们的EA,他们也将有资格获得HA。这显然是不可取的。我将如何去解决这个问题?

回答

1

存在的问题是,如果As和Bs的数量符合EA的要求,他们也有资格获得HA。这显然是不可取的。我将如何去解决这个问题?

的问题的答案的特定部分是:使用else

if (numA >= 11 && numB >=1) { 
    grade = "EA"; 
} else if (numA >=5 && numB >=5) { 
//^^^^------------------------------ here 
    grade = "HA"; 
} 
// ...and so on... 

另一种方法是有对于每个级别要求的对象,在一个阵列,通过排序“最好的“等级(EA,如果我正确理解你的话),然后通过这些对象进行循环检查,看看哪个等级合格并取得第一个等级。哪一个更适合你正在做的事情取决于你,在维护性和清晰度方面都有优点和缺点。

+0

有,它会认为一切,是不是EA是HA,它不一定是真正的问题。 – user3414510

+0

@ user3414510:不,你保留这个系列:'if(...)else if(...)else if(...)' –

+0

哦,我明白了。所以如果第一条语句变成true,第二条语句('else')将不会运行? – user3414510

0

我刚才给一试的程序看看

import java.util.Scanner; 

/*EA: 12 As, 2 Bs 
*HA: 6 As, 6 Bs, 2 Cs 
*CA: 8 Bs, 5 Cs 
*SA: 12 Cs 
*PA: 6 Cs*/ 
public class cases { 

    public static void main(String args[]){ 

     Scanner in=new Scanner(System.in); 
     System.out.println("Enter the number of A's B's C's to declare your grades"); 
     int a=in.nextInt(); 
     int b=in.nextInt(); 
     int c=in.nextInt(); 
     System.out.println("Enter the choice to know the Result 1:EA 2:HA 3:CA 4:SA 5:PA"); 
     int choice=in.nextInt(); 
     switch(choice) 
     { 
     case 1: if(a>=11&&b>=1){ 
        System.out.println("You are EA Grade Holder"); 

       } 
        else 
         System.out.println("You have to find out with other choices"); 
        break; 

     case 2: if(a>=5&&b>=5&&c>=1){ 

        System.out.println("You are HA Grade Holder"); 

        } 
        else 
        System.out.println("You have to find out with other choices"); 
         break; 
     case 3:  if(a>=7&&b>=7){ 

        System.out.println("You are CA Grade Holder"); 

       } 
        else 
        System.out.println("You have to find out with other choices"); 
        break; 
     case 4: if(c>=12){ 

          System.out.println("You are SA Grade Holder"); 

         } 
       else 
         System.out.println("You have to find out with other choices"); 
       break; 
     case 5: if(c==6){ 

        System.out.println("You are PA Grade Holder"); 

        } 
       else 
        System.out.println("You have to find out with other choices"); 
       break; 

     default:System.out.println("you have not entered proper choice"); 


     } 


    } 
} 
+0

尽管有时可能有效,但它不会解释某人得到11 As&3 Bs的情况,这应该是HA,但该程序不会返回该情况。 – user3414510

+0

@ user3414510我很快就会带着更新生病尝试设备一些逻辑让我们看看:) – coldy

+0

没关系,我找到了一个解决方案(我认为)。如果(numA> = 5 && numC = 0) {grade = } 这会返回正确的成绩,假设该人正确地输入他们的成绩。谢谢你的帮助。 :) – user3414510