2016-07-15 4 views
1

Problem: Noch immer Klasse B, wenn marksObtained unten ist 35Java-Code für von Marken zu finden Grad ist falsch

haben eine Reihe in der Datenbank gespeichert, die dem Notensystem

verwenden kann nicht switch-case beschreibt weil andere Klasse unterschiedliche Benotungssystem

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

Die Logik zur Ableitung Klasse haben wird, ist

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; 
} 
  • GELÖST

einfach eine andere Variable für verschiedene Stufen verwendet

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

Hat die Lösung nicht erwarten, dass diese albern sein. Dank Alle

+2

'while (j assylias

+2

Stellen Sie eine [mcve] bereit. – Gendarme

Antwort

1

Das Problem ist mit Ihrem Ausdruck während. j ist jede Schleife um 3 erhöht (da Sie j++ dreimal tun). also nach der zweiten Schleife, es entspricht 5, die höher ist als die Länge geteilt durch 3 (4), so dass Sie aus der Schleife sind.

Sie sollten einfach while j < (gradeDetails.length)

2

gradeDetails.length = 12 =>gradeDetails.length/3 wird 4 sein

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

So B ist einfach die letzte Iteration nicht bremsen die Schleifenbedingung. Sie können dies versuchen:

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

ODER

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

oder Sie können ein 2D-Array

oder Sie können eine Klasse verwenden, verwenden, die Marke, min und max wickelt.

+0

verstanden ... Ich werde versuchen, einige Dinge zu ändern –

0

Der Code verwenden, um zu erreichen, was Sie ... wollte

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); 
} 
Verwandte Themen