2016-07-18 31 views
0

Diese Frage bezieht sich auf das, das ich vor 4 Tagen erstellt habe here.
Was ich tun muß, ist ein Vertikale Histogramm zu schaffen, die die occurencies von Studenten der Noten lesen (von 1 bis 10), die in einer TXT-Datei wie folgt aufgeführt ist:Vertikales Histogramm nicht richtig angezeigt

Mark 2
Elen 3
Luke 7
Elen 9
Jhon 5
Mark 4
10 Elen
Luke 1
Jhon 1
Jhon 7
Elen 5
Mark 3
Mark 7

Hier ist mein Code:

import java.util.Scanner; 
import java.io.*; 

public class GradeHistogram { 
    public static void main(String[] args) throws IOException { 
    Scanner fileScan = new Scanner(new File("RegistroVoti.txt")); 
    String line; 
    char currentChar; 
    int [] array = new int [10]; 
    int max = 0, currentValue; 

    while (fileScan.hasNext()) { 
     line = fileScan.nextLine(); 
     for(int j=0; j < line.length(); j++) { 

     currentChar = line.charAt(j); 

     if (currentChar == '1') 
      array[0]++; 
     else if (currentChar == '2') 
      array[1]++; 
     else if (currentChar == '3') 
      array[2]++; 
     else if (currentChar == '4') 
      array[3]++; 
     else if (currentChar == '5') 
      array[4]++; 
     else if (currentChar == '6') 
      array[5]++; 
     else if (currentChar == '7') 
      array[6]++; 
     else if (currentChar == '8') 
      array[7]++; 
     else if (currentChar == '9') 
      array[8]++; 
     else if (currentChar == '0') 
      array[9]++; 
     } 
    } 
    for(int i = 0; i <= 9; i++) { 
     if (array[i] > max) 
     max = array[i]; 
    } 
    currentValue = max; 
    for(int i = max; i > 0; i--) { 
     for(int j = 0; j < 10; j++) { 
     if(array[j] < i) 
      System.out.print(" "); 
     else 
      System.out.print("*"); 
     } 
     System.out.println(); 
    } 
    System.out.println("12345678910"); 
    } 
} 

Da jedoch die charAt() Verfahren ein Sternchen auf die einzelnen char basiert druckt er fügt hinzu, fügt es die Askerisks hinzu, die auf "10" in der Zahl "1" Spalte sind.

ich tatsächlich versucht, die nextInt() Methode durch den Code ändern, aber wenn ich es lief, wurden keine Sternchen ...

gezeigt Wie kann ich dieses Problem lösen?

Jede Rückmeldung ist willkommen!

Vielen Dank im Voraus!

Antwort

1

Verwenden Sie einen regulären Ausdruck, um die Note aus der Zeile zu extrahieren. Verwenden Sie Integer.parseInt auf diesem Teil, um die Nummer zu erhalten, anstatt zu versuchen, das Parsing selbst zu implementieren:

Pattern pattern = Pattern.compile("^.+ (\\d+)$"); 

while (fileScan.hasNext()) { 
    line = fileScan.nextLine(); 
    Matcher m = pattern.matcher(line); 
    if (m.find()) { 
     array[Integer.parseInt(m.group(1))-1]++; 
    } 
}