2017-03-25 3 views
-2

Ich habe eine Datei „results.txt“ genannt, die diese Werte nach innen hat:Lesen einer Datei dann in ein Array umwandeln und die Zahlen berechnen

0118210:1801:XDCS1094:A:4 
0118210:1801:XDCS2034:B+:4 
0118210:1801:XDCS1043:C:3 
0118024:1801:XDCS1094:B:4 
0118024:1801:XDCS2094:A:4 

ich die Datei lesen wollen, machen es zu einem Array und entfernen Sie das Trennzeichen und berechnen Sie anhand der GPA-Formel. Dies ist mein Gedanke, wie es funktionieren sollte, aber ich bin immer noch nicht so sicher, weil ich neu in der Programmierung bin. Ich versuche auch, meine Ergebnisse in einer neuen Zeile anstatt in einer einzelnen Zeile anzuzeigen, wie im Bild gezeigt. Jede Hilfe wäre willkommen, es ist eine Aufgabe.

Line

public void run() 
    { 
      try{ 
       do{ 
         found=0; 
         received = in.readLine(); 
         array2=received.split(":"); 
           if(received.equals("QUIT")) break; 
            switch(received.charAt(0)) 
            { 
              case 'R': 
                 Register(); 
                 break; 
              case 'L': 
                 login(); 
                 break; 
              case 'V': 
                 View(); 
                 break; 
            } 
        }while(!received.equals("QUIT")); 
       } 
        catch(IOException e) 
        { 
          e.printStackTrace(); 
        } 

public void View() throws IOException 
    { 
      String grade =""; 
      in3 = new BufferedReader(new FileReader("results.txt")); 
      while((result = in3.readLine()) !=null) 
      { 
        array4=result.split(":"); 
          if((array2[1].equals(array4[0])) && (array2[2].equals(array4[1]))) 
            { 
              grade += array4[2]+" "+array4[3]+" "+array4[4]; 
              found=1; 
            } 
      if(found==0) 
      out.println("No Records"); 
      } 
      out.println(grade); 
      GCPA(); 
    } 

    public void CGPA() throws IOException{ 
     String grade = "", cgpa = ""; 
     int IntValue = 0, IntCH = 0, IntCGPA = 0, IntArray = 0; 
    if(array4[3] == "A") { 
     IntArray = Integer.parseInt(array4[3]); 
     IntValue = IntArray * 4; 
    } else if(array4[3] == "B") { 
     IntArray = Integer.parseInt(array4[3]); 
     IntValue = IntArray * 3; 
    } 
    IntCH += IntArray; 
    IntCGPA = IntValue/IntCH; 
    out.println(IntCGPA); 
    } 

Erstens: Wie mache ich die Ergebnisse in eine neue Zeile statt alles in einer Zeile?
\n Hinzufügen funktioniert nicht und wenn ich mein Programm laufen ist es nicht meine IntCGPA zeigen und zeigt diesen Fehler

Exception in thread "Thread-0" java.lang.ArithmeticException:/by zero 
    at MultiClientHandler1.CGPA(MultiClientHandler1.java:95) 
    at MultiClientHandler1.View(MultiClientHandler1.java:81) 
    at MultiClientHandler1.run(MultiClientHandler1.java:116) 
+0

soo was genau ist deine Frage? –

+0

okay .. zuerst wie mache ich die Ergebnisse in eine neue Zeile stattdessen alles in einer Zeile wie weil \ n nicht funktioniert und wenn ich mein Programm ausführen zeigt es nicht meine IntCGPA –

+0

Ihre Ausnahme zeigt deutlich, dass Sie durch Null in Zeile 95 geteilt. Sie können das selbst beheben –

Antwort

1

Sie nur drucken, die Dateidaten, nicht in einem Array zu speichern.

Versuchen Sie, eine Methode die Datei einfach in eine Liste zu lesen.

private List<String[]> getDataArray(String filename) throws IOException { 
    List<String[]> data = new ArrayList<>(); 

    InputStream is = getClass().getClassLoader().getResourceAsStream(filename); 
    Scanner sc = new Scanner(is); 

    while (sc.hasNextLine()) { 
     data.add(sc.nextLine().split(":")); 
    } 

    return data; 
} 

Verbrauch:

List<String[]> data = getDataArray("results.txt"); 
for (String[] array : data) { 
    System.out.println("1: " + array[1]); // for example 
} 

ich auch in einer Zeile ... \ n muß nicht

arbeitet statt alles versuche, meine Ergebnisse Anzeige in einer neuen Zeile zu machen Ihr Code verwendet nicht \n.

String grade =""; 

while (...) { 
    grade += array4[2]+" "+array4[3]+" "+array4[4]; 
} 

out.println(grade); 

dieses Muster stattdessen versuchen.

StringBuilder grade = new StringBuilder(); 

while (...) { 
    // Add columns from array 
    grade 
     .append(array4[2]).append(" ") 
     .append(array4[3]).append(" ") 
     .append(array4[4]); 

    // End line 
    grade.append("\n"); 
} 

out.println(grade.toString()); 

Wie dem auch sei, wirft Ihr Code eine Ausnahme und stoppt.

Exception in thread "Thread-0" java.lang.ArithmeticException:/by zero 
    at MultiClientHandler1.CGPA(MultiClientHandler1.java:95) 

Und es sagt Ihnen, die Klasse, Methode und die Zeilennummer ->bei MultiClientHandler1.CGPA (MultiClientHandler1.java:95), so dass man dort sehen

IntCGPA = IntValue/IntCH; 

Und Überlege dir selbst: "Warum sollte ich mich durch Null teilen?" dann sehen Sie, dass

IntCH = 0; 
IntCH += IntArray; 

was bedeutet, dass IntArray Null an einem gewissen Punkt sein muss!

Nicht wirklich sicher, was Sie hier versuchen.

if(array4[3] == "A") { // This is the string "A" 
    IntArray = Integer.parseInt(array4[3]); // So, you can't parse an int from "A" 

Auch Hinweis: How do I compare strings in Java?

Stattdessen versuchen, diese

int ch = 0; 
int credits = 0; 
final int baseCredits = Integer.parseInt(array4[4]); 
String grade = array4[3]; 
switch (grade) { 
    case "A": 
     credits = baseCredits * 4; 
     break; 
    case "B": 
     credits = baseCredits * 3; 
     break; 
    // etc. 
} 

int cGPA = baseCredits/credits; 

Und bitte nutzen Sie nicht Ihre Methode und Variablennamen und ich würde Sie intArray Namen vorschlagen oder intValue etwas beschreibender.

Verwandte Themen