2016-04-03 6 views
1

Ich bin relativ neu in Java, also Entschuldigung, wenn ich irgendwelche offensichtlichen Fehler gemacht habe. Ich versuche, die ArrayList "Nummern" von der Klasse "IO" in die Klasse "Interaktion" zu übergeben. Ich versuche, den Inhalt von Zahlen als Test auf der Konsole zu drucken. Wenn ich die Methode getNumbers aufruft, bleibt die Konsole leer. Was mache ich falsch? Hier ist, was ich habe:Pass ArrayLists von einer Klasse in eine andere

IO-Klasse:

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

public class IO { 
    public static void main (String[] args){ 
     fileInput(); 
    } 
    public static void fileInput() { 
     //variable setup 
     String file = "src/seats.txt"; 
     int number; 

     ArrayList<Integer> numbers = new ArrayList<Integer>(); 


     //Read file into the ArrayLists 
     try { 
      Scanner input = new Scanner(new FileReader(file)); 

      while (input.hasNextLine()){ //read a line from file 
       number = input.nextInt(); 
       input.nextLine(); 

       numbers.add(number); 
      } 
      input.close(); 
     } 
     catch (IOException e){ 
      System.out.println(e); 
     } 
     public static ArrayList<Integer> getNumbers(){ 
      ArrayList<Integer> numbers = new ArrayList<Integer>(); 
      return numbers; 
     } 
    } 

Interaktion Klasse:

import java.io.*; 
import java.util.ArrayList; 
import java.util.Scanner; 
public class Interaction { 

    public static void main(String[] args) { 
     menu(); 
     IO.fileInput(); 
    } 
    static Scanner consoleInput = new Scanner (System.in); 
    public static void menu(){ 
     String userChoice = ""; 

     while (!userChoice.equals("QUIT")){ 
      System.out.println("|   MAIN MENU    |"); 
      System.out.println("|-----------------------------------|"); 
      System.out.println("|         |"); 
      System.out.println("| 1.) Reserve a Seat    |"); 
      System.out.println("| 2.) Cancel a Reservation   |"); 
      System.out.println("| 3.) View Waiting List    |"); 
      System.out.println("| Quit.) Exit Program    |"); 
      System.out.println("|        v0.1 |"); 
      System.out.println("\nPlease make your selection:"); 

      userChoice = consoleInput.next().toUpperCase(); 

      switch(userChoice){ 
       default: 
       if (!userChoice.equals("1") && !userChoice.equals("2") && !userChoice.equals("3")){ 
       System.out.println("Invalid option, please try again."); 
      } 
      pause(); 
      break; 
      case "1": 
      if (userChoice.equals("1")){ 
       reserveSeat(); 
      } 
      pause(); 
      break; 
      case "2": 
      if(userChoice.equals("2")){ 
       getNumbers(); 
       cancel(); 
      } 
      pause(); 
      break; 
      case "3": 
      if(userChoice.equals("3")){ 
       waitingList(); 
      } 
      pause(); 
      break; 
      case "QUIT": 
      System.out.println("Thank you for using our service!"); 
      consoleInput.close(); 
      } 
     } 
    } 

    private static void reserveSeat() { 
     String type, direction, userChoice = null; 
     int number; 

    private static void cancel() { 
     System.out.println("Test 2"); 
    } 
    private static void waitingList() { 
     System.out.println("Test 3"); 
    } 
    private static void pause(){ 
     System.out.println("Press enter to return to the menu."); 
     Scanner enter = new Scanner(System.in); 
     enter.nextLine(); 
    } 
    public static void getNumbers(){ 
     ArrayList<Integer> numbers = IO.getNumbers(); 
     System.out.println(); 
     int sz = numbers.size(); 
     for (int i = 0; i < sz; i++){ 
      System.out.println(numbers.get(i).toString()); 
     } 
    } 
} 

Ich bin mir bewusst, ähnliche Fragen vor gefragt worden, aber ich kann nichts besonders hilfreich. Jede Hilfe würde sehr geschätzt werden.

Edit: jetzt zeigt gesamte Interaktion Klasse, nicht nur getNumbers()

+0

getNumbers gibt nur eine leere ArrayList zurück, das ist nicht besonders nützlich.Sie wollen IO ein ArrayList-Feld geben, es mit einer Methode füllen und es dann mit 'getNumbers()' zurückgeben. –

Antwort

0

Sie haben hier einen schwerwiegenden Fehler gemacht. Sie haben eine statische Methode IO.getNumbers() aufgerufen, die eine leere ArrayList initialisiert und zurückgibt. Da Sie vergessen haben, die tatsächliche ArrayList von der Methode fileInput() abzurufen, können Sie den folgenden Code in der IO-Klasse verwenden.

public class IO { 
public static void main (String[] args){ 
    fileInput(); 
} 
public static ArrayList<Integer> fileInput() { 
    //variable setup 
    String file = "src/seats.txt"; 
    int number; 

    ArrayList<Integer> numbers = new ArrayList<Integer>(); 


    //Read file into the ArrayLists 
    try { 
     Scanner input = new Scanner(new FileReader(file)); 

     while (input.hasNextLine()){ //read a line from file 
      number = input.nextInt(); 
      input.nextLine(); 

      numbers.add(number); 
     } 
     input.close(); 
    } 
    catch (IOException e){ 
     System.out.println(e); 
    } 
    return numbers; 
} 
} 

Sie können die getNumbers-Methode wie folgt ändern.

public static void getNumbers(){ 
ArrayList<Integer> numbers = IO.fileInput(); 
System.out.println(); 
int sz = numbers.size(); 
for (int i = 0; i < sz; i++){ 
    System.out.println(numbers.get(i).toString()); 
} 

Edit: Bitte beachten Sie, dass Sie einen aussagekräftigen Namen Ihrer statischen andere Methode als FileInput- geben muss(), weil es eine Arraylist von ganzen Zahlen zurückkehrt.

+0

Im Idealfall aus der Sicht der Namenskonventionen sollte getNumbers Zahlen zurückgeben und nicht drucken. – AbhishekAsh

+0

Yup. Ich stimme dir zu. Ich habe gerade den Code geändert, den er gefragt hat. Design und Best Practices ist dies keine gute Praxis. Ich werde die Antwort bearbeiten. Vielen Dank! –

+0

Gibt es eine Möglichkeit, dass dies für mehrere ArrayLists gleichzeitig funktioniert? – watacus

1

Sie wollen die gleiche numberssichtbar in IO.fileInput() und IO.getNumbers() zu sein; Sie könnten eine Klasse (static) numbers Feld hinzufügen, und verwenden Sie es in beiden Orten (und Programm auf die List Schnittstelle). So etwas wie

private static List<Integer> numbers = new ArrayList<>(); 
public static List<Integer> getNumbers(){ 
    return numbers; 
} 

Dann vergessen Sie nicht die numbers Erklärung von fileInput zu entfernen (so, dass sie die static Feld verwendet).

0

Ich denke, Ihr Code hat einige Probleme:

Hier legen Sie eine neue Arraylist erstellen und (leer) zurückkehrt. Also, wenn Sie versuchen, es zu drucken ... gibt es keine Elemente zu zeigen.

Sie müssen Ihre Nummer definieren ArrayList die "fileInput" -Methode. Dann müssen Sie in "fileInput" damit arbeiten und es (oder eine Kopie davon, entscheiden Sie) in "getNumbers" -Methode zurückgeben.

Wenn Sie dann "IO.getNumbers()" aus der Interaktionsklasse aufrufen, sollten Sie vorher "IO.fileInput()" aufrufen.

Ich hoffe, dass meine Antwort für Sie hilfreich sein wird.

Viel Glück!

Verwandte Themen