【发布时间】:2020-07-26 03:48:51
【问题描述】:
[编辑:我已经解决了这个问题。我只需要使数组静态。我不敢相信我没有那样做。感谢大家的帮助!]
我有一个书店计划,人们最多可以购买 5 种不同的书籍。一旦他们选择了一个标题,它将稍后添加到发票的数组中。选择标题并将其放入数组中是 2 个不同的类。只是为了试用,我要买两本书:田径和汽车运动。
预期输出:
You bought 2 book(s)!
1) Athletics Weekly Magazine
2) Autosport Magazine
Edited List.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 中(我打印发票的地方):
public class List {
static int total=0;
public void totalbooks(int num) {
total+=num;
}
String[] bookname = new String[5];
String[] booktype = new String[5];
static int a=0;
public void booknames(String newBookName, String newBookType) {
bookname[a]=newBookName;
booktype[a]=newBookType;
a++;
}
public void printInvoice() {
System.out.println("You bought "+total+" book(s).");
for (int i=0; i<total; i+=1) {
System.out.println((i+1)+") "+bookname[i]+" "+booktype[i]);
}
}
}
这个的输出是:
You bought 2 book(s).
1) null null
2) Autosport Magazine
我也尝试过使用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));
}
}
我在 SportMag.java 中遇到错误,显示 bookname cannot be resolved。提供的快速解决方法是创建一个局部变量 bookname,但它不会转到 List.java 中的数组
我还没有了解 ArrayList,所以我不太确定在这里做什么。
我还尝试制作另一个版本,其中所有内容都在 main 方法中,并且只调用其他类中的方法来显示标题,而不是实际扫描其他方法中的输入。我这样做是为了在每个函数之后没有对象死亡。主线变得非常长。
我不知道这是否适用于 2 本书,因为我无法循环,因为所有内容都在主目录中。
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
}
}
}
}
如何将书名输入数组并正确显示?
【问题讨论】:
-
用户 ArrayList 而不是数组
-
@NishanthMatha OP 显然是 Java 初学者。轻松的牛仔。
-
@NishanthMatha 我尝试声明
ArrayList<String> bookname = new ArrayList<String>();,但我不能在其他类中使用bookname.add("Autosport");。它会给出bookname无法解析的错误。当我尝试使用专门的方法添加名称时,它仍然给出相同的错误。 -
请用您的尝试更新问题
-
抱歉回复晚了。我已经更新了问题。