2016-04-11 14 views
0

Ich habe eine Textdatei und Eclipse liest das ohne Probleme. Das Problem ist, dass ich nicht weiß, wie ich die Zahlen vom FileReader halten kann. Mein Programm soll einen Text aus einer Datei lesen, die zwei Namen mit ihren Schulnoten hat.Wie kann ich Zahlen aus einer Textdatei lesen und vergleichen?

Zum Beispiel:

Jack 30 30 30
Martin 20 20 30

Wie finde ich das mit den größeren Punkten?

public static void main(String[] args) { 
    String name = null; 
    try { 
     Scanner keybord = new Scanner(System.in); 
     System.out.println("enter in file name"); 
     String filename = keybord.nextLine(); 
     Scanner file = new Scanner(new File(filename)); 

     while (file.hasNext()) 
     { 
      name = file.nextLine(); 
      System.out.println(name); 

      ///?? what do i have to write to compare to persons points 
     } 
    } catch(IOException e) { 
     System.out.println("The file does not exist"); 
    } 
} 
+0

Eines der ersten Dinge, die Sie lernen sollten, ist die API bestimmter Klassen/Bibliotheken zu lesen, um zu verstehen, wie eine Methode funktioniert und was sie tut. In diesem Fall: ['Scanner # nextLine()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#nextLine--). Dies ist nicht die Methode, die Sie hier aufrufen möchten. Verwenden Sie stattdessen 'Scanner # next()' (überprüfen Sie die JavaDoc/API, um herauszufinden, warum). Verwenden Sie dann 'Scanner # nextInt()', um die Zahlen zu lesen und sie [in einer Sammlung] zu speichern (https://docs.oracle.com/javase/tutorial/collections/). Von dort können Sie auf die Nummern zugreifen und diese vergleichen. – Tom

+0

Erstellen Sie einfach eine Klasse (z. B. 'StudentPoint'), die sowohl den Namen als auch den Punkt des Schülers enthält. Und wenn Sie eine Zeile lesen, teilen Sie sie in Werte und instanziieren Sie Ihr Objekt, fügen Sie es zu einer 'List' hinzu. Schließlich iteriere durch deine "Liste" und finde heraus, was du willst. –

+0

Danke Tom :) Ich lese mehr über Scanner und Pufferklassen. –

Antwort

1

ich weiß, ist es nicht eine effiziente Methode, aber ich habe das Problem mit diesem Code gelöst:

public static void main(String[] args) 
{ 
    String name = null; 
    int i = 0; 
    int max = Integer.MIN_VALUE; 
    int min = Integer.MAX_VALUE; 
    try 
    { 
     Scanner keybord = new Scanner(System.in); 
     System.out.println("enter in file name"); 
     String filename = keybord.nextLine(); 
     Scanner file = new Scanner(new File(filename)); 

     while (file.hasNext()) 
     { 
      name = file.next(); 
      System.out.println(name + " "); 

      while (file.hasNextInt()) 
      { 
       i = i + file.nextInt(); 
      } 
      if (i < min) 
      { 
       min = i; 
      } 
      System.out.println("min " + min); 
      if (i > max) 
      { 
       max = i; 
      } 
      System.out.println("max " + max); 
      i = 0; 
     } 
    } catch (IOException e) 
    { 
     System.out.println("File does not exist"); 
    } 
} 
+0

Schön zu sehen, dass du eine Antwort auf deine Frage gefunden hast, indem du Nachforschungen anstellst und ein bisschen Versuch und Irrtum. Vergiss nicht [akzeptieren] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) Ihre Antwort :). – Tom

+1

Danke Tom SO VIEL :) und einen schönen Tag :) –

0

Dies ist wahrscheinlich nicht der effizienteste Weg, um es zu lösen, aber ich gab es eine Chance. Es ist nicht der vollständige Code für den Vergleich mehrerer Zeilen, aber Sie können dies einfach durch eine while-Schleife ausführen, bis die Datei nicht mehr wie Sie es bereits getan haben. Nachdem Sie dies ausgeführt haben, können Sie den Wert jeder Zeile in einer Variablen speichern und dann die Variablen vergleichen. Beispiel: boolean xIsBigger x> y ;. Wenn es wahr ist, ist x die größere Zahl, aber wenn es falsch ist, dann weißt du, dass y die größere Zahl ist. Hoffe das hilft.

import javax.script.ScriptEngine; 

import javax.script.ScriptEngineManager; 

import javax.script.ScriptException; 

public class Test { 

    public static void main(String[] args) throws ScriptException { 
     String line = "Jack 20 20 20"; 

     line = line.replaceAll("[^0-9]", " "); 

     line = line.replaceFirst("^ *", ""); 

     line = line.replaceAll(" ", "+"); 

     ScriptEngineManager mgr = new ScriptEngineManager(); 
     ScriptEngine engine = mgr.getEngineByName("JavaScript"); 

     System.out.println(engine.eval(line)); 

} 

} 

Systemleistung: 60.

+0

Danke, 'ScriptEngineManager' zu verweisen. Das ist das erste Mal, dass ich davon weiß: D –

+3

Diese Lösung fühlt sich an wie der Versuch, eine Biene mit einem Vorschlaghammer zu töten. –

+0

Vielen Dank für Hilfe @ Tom und Devan. Ich weiß, dass mein Code so lang ist, weil ich nicht so viel Methoden und Klassen kenne :( –

Verwandte Themen