如何在Java中向另一个类的数组中添加数据?
[编辑:我已经解决了这个问题。我只需要将阵列设置为静态。我不敢相信我没有这样做。谢谢大家的帮助!] 我有一个书店计划,人们最多可以买5本不同的书。一旦他们选择了一个标题,它将在以后添加到发票的数组中。选择标题并将其放入数组是在两个不同的类中进行的。为了试用,我买了两本书:田径和汽车运动 预期产出:如何在Java中向另一个类的数组中添加数据?,java,arrays,class,Java,Arrays,Class,[编辑:我已经解决了这个问题。我只需要将阵列设置为静态。我不敢相信我没有这样做。谢谢大家的帮助!] 我有一个书店计划,人们最多可以买5本不同的书。一旦他们选择了一个标题,它将在以后添加到发票的数组中。选择标题并将其放入数组是在两个不同的类中进行的。为了试用,我买了两本书:田径和汽车运动 预期产出: You bought 2 book(s)! 1) Athletics Weekly Magazine 2) Autosport Magazine java:这两种方法我都试过了。首先是更改为i-1
You bought 2 book(s)!
1) Athletics Weekly Magazine
2) Autosport Magazine
java:这两种方法我都试过了。首先是更改为i-1
在SportsMag.java中:
import java.util.Scanner;
public class SportMag extends Magazine{
Scanner scan = new Scanner(System.in);
public void title() {
System.out.println("");
System.out.println("What do you want to buy?");
System.out.println("1. Athletics Weekly");
System.out.println("2. Autosport");
int choice = scan.nextInt();
List l = new List();
if (choice==1) {
l.totalbooks(1);
l.booknames(1,"Athletics Weekly", "Magazine");
} else {
l.totalbooks(1);
l.booknames(1,"Autosport", "Magazine");
}
System.out.println("Do you want to go back to menu? (Yes/No)");
String back = scan.next();
if (back.equalsIgnoreCase("Yes")) {
BookType b = new BookType();
b.bookMenu();
}
if (back.equalsIgnoreCase("No")) {
l.printInvoice();
}
}
}
在List.java中(我在其中打印发票):
我还尝试使用ArrayList
:
在SportMag.Java中:
//same as above, only a little difference here
List l = new List();
if (choice==1) {
l.totalbooks(1);
bookname.add("Athletics Weekly");
} else {
l.totalbooks(1);
bookname.add("Autosport");
}
在List.java中:
ArrayList<String> bookname = new ArrayList<String>();
public void printInvoice() {
System.out.println("You bought "+total+" book(s).");
for (int i=0; i<total; i+=1) {
System.out.println(bookname.get(i));
}
}
如何将图书名称输入数组并正确显示?我认为您在变量
列表l的范围方面遇到了问题。您在函数title
中创建此变量,然后使用它,将客户请求的产品插入其中。但是,变量从哪里来?它只是在函数结束时消失。这个对象应该在一个范围内,只要它是有趣的,它就会存在
例如,您可以将此变量转换为主类的属性。它甚至可以是一个静态类。您应该找到更好的方法来保存列表
对象。事实上,只要title
函数结束,它就会消失。用户数组列表而不是array@NishanthMathaOP显然是一个Java初学者。很简单,牛仔。@NishanthMatha我试图声明ArrayList bookname=new ArrayList()代码>但我不能使用bookname.add(“Autosport”)代码>在另一个类中。它将给出一个无法解决的错误bookname
。当我尝试使用特定的方法添加名称时,仍然会出现相同的错误。请使用您尝试过的方法更新问题。抱歉,请稍后回复。我已经更新了问题。哦,对不起,我刚开始用的是total
,但忘了更改它。我已将其更改为I-1
,现在输出为1)Autosport(杂志)2)null(null)
您应该编辑您的问题,因为此错误不是问题的一部分。我将编辑我的答案。
//same as above, only a little difference here
List l = new List();
if (choice==1) {
l.totalbooks(1);
bookname.add("Athletics Weekly");
} else {
l.totalbooks(1);
bookname.add("Autosport");
}
ArrayList<String> bookname = new ArrayList<String>();
public void printInvoice() {
System.out.println("You bought "+total+" book(s).");
for (int i=0; i<total; i+=1) {
System.out.println(bookname.get(i));
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
BookType b = new BookType();
List l = new List();
b.bookMenu();
int booktypechoice = scan.nextInt();
if (booktypechoice ==1) {
Magazine mag = new Magazine();
mag.magtype();
int magtypechoice = scan.nextInt();
if (magtypechoice==1) {
SportMag smag = new SportMag();
smag.title();
int smagchoice = scan.nextInt();
SportMag sportmag = new SportMag();
if (smagchoice==1) {
l.totalbooks(1);
l.booknames("Athletics Weekly", "Magazine");
System.out.println("Do you want to go back to menu? (Yes/No)");
String goback = scan.next();
if (goback.equalsIgnoreCase("Yes")) {
b.bookMenu();
}
if (goback.equalsIgnoreCase("No")) {
l.printInvoice();
}
} else {
l.totalbooks(1);
l.booknames("Autosport", "Magazine");
System.out.println("Do you want to go back to menu? (Yes/No)");
String goback = scan.next();
if (goback.equalsIgnoreCase("Yes")) {
b.bookMenu();
}
if (goback.equalsIgnoreCase("No")) {
l.printInvoice();
}
}
} else {
//all the other book choices goes here.
//It's really long, but it's just like sportmag up there
}
}
}
}