2016-07-15 1 views
1

Проблемы: Тем не менее получение класса B, если marksObtained ниже 35Java код для нахождения класса от марок неверна

Есть массив хранится в базе данных, которая описывает системе оценок

Не может использовать переключатель-корпус, потому что другой класс будет иметь различную систему классификации

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

'в то время как (к assylias

+2

Обеспечьте [mcve]. – Gendarme

ответ

1

Проблема с вашим выражением while. 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; 
} 

ИЛИ

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; 
} 

ИЛИ вы можете использовать 2D-массив

ИЛИ вы можете использовать класс, который оборачивает метки, мин и макс.

+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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^