2016-07-15 19 views
1

問題:仍然得到B級如果marksObtained低於35Java代碼從標記發現級是不正確

具有存儲在數據庫中的一個陣列,其描述了分級系統

不能使用的switch-case因爲不同的類將有不同的分級系統

String[] gradeDetails = {A,60,100, 
         B,45,59.99, 
         C,35,44.99, 
         D,0,34.99}; 

用於推導級的邏輯是

int j=0; 
while (j<gradeDetails.length/3){ 
    grade = gradeDetails[j++]; 
    min = Float.parseFloat(gradeDetails[j++]); 
    max = Float.parseFloat(gradeDetails[j++]); 
    if(marksObtained >= min && marksObtained <= max) 
     break; 
} 
  • 解決

只是使用了不同的變量不同的增量

j=0; 
k=0; 
while (k<gradeDetails.length/3){ 
    grade = gradeDetails[j++]; 
    min = Float.parseFloat(gradeDetails[j++]); 
    max = Float.parseFloat(gradeDetails[j++]); 
    if(marksObtained >= min && marksObtained <= max) 
     break; 
    k++; 
} 

沒想到的解決辦法是這個愚蠢的。 由於所有

+2

'而(j assylias

+2

提供[mcve]。 – Gendarme

回答

1

問題在於你的表情。 j每增加3個循環(因爲你做了三次j++)。 所以在第二個循環之後,它等於5,這比長度除以3(4)要高,所以你不在循環中。

您只需要使用while j < (gradeDetails.length)

2

gradeDetails.length = 12 =>gradeDetails.length/3將4

while (j<gradeDetails.length/3){ 
    grade = gradeDetails[j++]; // A -> j=0 , B -> j = 4 loop will end 
    min = Float.parseFloat(gradeDetails[j++]); 
    max = Float.parseFloat(gradeDetails[j++]); 
    if(marksObtained >= min && marksObtained <= max) 
     break; 
} 

所以B是簡單地將最後一次迭代到不制動循環條件。 你可以試試這個:

while (j<gradeDetails.length){ 
    grade = gradeDetails[j++];  
    min = Float.parseFloat(gradeDetails[j++]); 
    max = Float.parseFloat(gradeDetails[j++]); 
    if(marksObtained >= min && marksObtained <= max) 
     break; 
} 

OR

while (j<gradeDetails.length/3){ 
    grade = gradeDetails[j*3]; 
    min = Float.parseFloat(gradeDetails[j*3+1]); 
    max = Float.parseFloat(gradeDetails[j*3+2]); 
    j++; 
    if(marksObtained >= min && marksObtained <= max) 
     break; 
} 

或者你可以使用一個二維數組

或者你可以使用一個包裝標誌,最小和最大的一類。

+0

明白...我會嘗試改變一些事情 –

0

達到你想要的代碼...

public static void main(String[] args) { 
     String[] gradeDetails = { "A", "60", "100", "B", "45", "59.99", "C", "35", "44.99", "D", "0", "34.99" }; 
     double marks = 0; 
     String grade = ""; 
     for (int j = 0; j < gradeDetails.length; j++) { 
      grade = gradeDetails[j]; 
      j = j + 1; 
      double min = Double.valueOf(gradeDetails[j]); 
      j = j + 1; 
      double max = Double.valueOf(gradeDetails[j]); 
      if (marks >= min && marks <= max) 
       break; 
     } 
     System.out.println("Your grade is :: "+grade); 
}