[英]How to pass a 2D Array from one class to be used in another as a parameter so that they can be sorted into 2 ArrayLists
[英]Pass ArrayLists from one class to another
我对 Java 比较陌生,所以如果我犯了任何明显的错误,我深表歉意。 我正在尝试将 ArrayList“数字”从“IO”类传递到“交互”类。 我试图将数字的内容打印到控制台作为测试。 当我调用方法 getNumbers 时,控制台保持空白。 我究竟做错了什么? 这是我所拥有的:
IO类:
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;
}
}
交互类:
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());
}
}
}
我知道以前有人问过类似的问题,但我找不到任何特别有用的东西。 任何帮助将不胜感激。
编辑:现在显示整个交互类,而不仅仅是 getNumbers()
您希望在IO.fileInput()
和IO.getNumbers()
显示相同的numbers
; 您可以添加一个类( static
) numbers
字段,并在两个地方使用它(并编程到List
接口)。 就像是
private static List<Integer> numbers = new ArrayList<>();
public static List<Integer> getNumbers(){
return numbers;
}
然后,不要忘记从fileInput
删除numbers
声明(以便它使用static
字段)。
你在这里犯了一个严重的错误。 您已经调用了一个静态方法IO.getNumbers() ,它初始化一个空的 ArrayList 并返回它。 由于您忘记从 fileInput() 方法中获取实际的 ArrayList,您可以在 IO 类中使用以下代码。
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;
}
}
您可以按如下方式修改 getNumbers 方法。
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());
}
编辑:请注意,除了fileInput()之外,您必须为静态方法指定一个有意义的名称,因为它返回的是整数的 ArrayList。
我认为你的代码有一些问题:
在这里,您正在创建一个新的 ArrayList 并返回它(空)。 因此,当您尝试打印它时……没有要显示的元素。
public static ArrayList<Integer> getNumbers(){
ArrayList<Integer> numbers = new ArrayList<Integer>();
return numbers;
}
您需要在“fileInput”方法中定义您的编号 ArrayList。 然后,您需要在“fileInput”中使用它并在“getNumbers”方法中返回它(或它的副本,您决定)。
然后,当你从交互类调用“IO.getNumbers()”时,你应该先调用“IO.fileInput()”。
希望我的回答对你有帮助。
祝你好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.