2016-11-11 3 views
0

Ausgabe:For-jeder Schleife wird nicht die erste angeforderte Zeile

Wenn ich das laufe alles funktioniert gut. Sagen wir, dass meine gewählten IDs sind: 0001, 0002, 0003, 0004. Und ihre Infos: info1, info2, info3, info4. Wenn ich 0002 im Scanner passiere, bekomme ich info2. Wie Sie erwarten würden, aber wenn ich 0001 übergebe, würde ich erwarten, Info1 zu bekommen, aber stattdessen bekomme ich nichts. Ich habe dies mit einer Reihe von festen Größe 3 versucht und es hat gut funktioniert. Ich wechselte zu einer ArrayList, weil ich nicht weiß, wie lange die Datei sein würde. Warum passiert das?

Ich bin ein Neuling in der Programmierung, also bitte verzeihen Sie meinen Mangel an Wissen darüber, wo man nach diesen Dingen suchen.

Was mein Programm tut, liest in einer Datei und fügt alle Zeilen zu einer ArrayList und fragt dann nach Eingabe vom Benutzer, sollte die Eingabe im Format von xxxx oder 4 Zeichen sein.

Die Textdatei ich als ein Beispiel aus sieht wie folgt aus, keine zusätzlichen Leerzeichen auf den Linien:

0001 
info1 
4 
0002 
info2 
5 
0003 
info3 
9 
0004 
info4 
10 
0005 
info5 
3 

Die Hauptklasse:

public class Main { 

    public static ArrayList<Gameobject> games = new ArrayList<>(); 

    public static void main(String[] args) throws IOException { 

     Scanner sc = new Scanner(new File("objects.txt")); 

     String id, info; 
     int amount; 

     while(sc.hasNextLine()) { 

      id = sc.nextLine(); 
      info = sc.nextLine(); 
      amount = Integer.parseInt(sc.nextLine()); 

      Gameobject s = new Gameobject(id, info, amount); 

      games.add(s); 
      System.out.println(s.getId()); 
     } 

     sc = new Scanner(System.in); 

     info(sc.next()); 

    } 

Die Info Methode ist als folgt.

public static void info(String id){ 
    for(Gameobject s : games){  
     if(s.getId().equals(id)){ 
      System.out.println(s.getInfo()); 
     } 
    } 
} 

Und die Klasse Gameobject

public class Gameobject { 

    String id, info; 
    int amount; 

    Gameobject(String id, String info, int amount) { 
     this.id = id; 
     this.info = info; 
     this.amount = amount; 
    } 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public String getInfo() { 
     return info; 
    } 
    public void setInfo(String info) { 
     this.info = info; 
    } 
    public int getAmount() { 
     return amount; 
    } 
    public void setAmount(int amount) { 
     this.amount = amount; 
    } 
} 

Ich habe einige Tests und in games.get(0).getId() zum Eintrag Methode übergeben und es funktionierte. Das brachte mir die ID "0001" vom Gameobject. Aber nur "0001" passierte nicht.

+2

Vielleicht ist Ihre Datei 'objects.txt' falsch formatiert oder so. Bitte, fügen Sie es in Ihre Post ein. – Lefteris008

+0

* "Ausgabe ist ganz unten." * Es wäre viel besser, es an die Spitze zu setzen. –

+0

@DavidWallace: Vermutlich meint er die erweiterte 'for' -Schleife in der' info' Methode. –

Antwort

2

Ich bin mit Lefteris008 auf diesem. Überprüfen Sie Ihre objects.txt.

Ihre IDs sind Strings und innerhalb Ihrer For-Schleife vergleichen Sie Gameobject.getId() mit einem Konsoleneingang.

Nachdem Sie Ihre objects.txt enthalten die ID 0001<space> statt 0001 reicht für .equals(id)false zu ergeben.

Wenn es eine Chance, dass Ihre Eingabe wird malformed werden, könnten Sie versuchen, Ihren Code handelt defensiver zu machen:

// This will remove leading and trailing whitespaces 
id = sc.nextLine().trim(); 

Dies ist einfach zu helfen, eine Vorstellung davon zu bekommen, wie Sie Ihre Eingabedaten zu handhaben . Dies ist bei weitem nicht produktionsreif.

+0

Nach zusätzlichen Leerzeichen gesucht und auch eine .trim() -Methode zur ID hinzugefügt, um sicher zu sein und nichts. –

+0

Ok, dann füge bitte deine objects.txt zu deiner Frage hinzu. Als nächstes sollten Sie sicherstellen, dass es nicht der "Read from Input" Teil ist, der Ihnen Schwierigkeiten bereitet, indem Sie 'sc.next()' durch '0001' ersetzen. Hast du versucht, deinen Code zu debuggen? – Oli

+0

@alexHexan Sie sagen, Ihre Eingabedatei hat keine zusätzlichen Leerzeichen, aber ich sehe ein zusätzliches Leerzeichen in jeder einzelnen Zeile. – dabadaba

Verwandte Themen