【问题标题】:How to add data into array in another class in Java?如何将数据添加到Java中另一个类的数组中?
【发布时间】: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&lt;String&gt; bookname = new ArrayList&lt;String&gt;();,但我不能在其他类中使用bookname.add("Autosport");。它会给出bookname 无法解析的错误。当我尝试使用专门的方法添加名称时,它仍然给出相同的错误。
  • 请用您的尝试更新问题
  • 抱歉回复晚了。我已经更新了问题。

标签: java arrays class


【解决方案1】:

我认为您对变量 List l 的范围有疑问。您在函数title 中创建此变量并使用它,将客户请求的产品插入其中。但是,变量从那里去哪里呢?它只是在函数结束时消失。这个对象应该在一个范围内,只要它是有趣的,它就会一直存在。

例如,您可以将此变量转换为主类的属性。它甚至可以是一个静态类。您应该找到更好的方法来保存您的 List 对象。事实上,只要title 函数结束,它就会死掉。

【讨论】:

  • 哦,抱歉,我一开始用的是total,忘记改了。我已将其更改为i-1,现在输出为1) Autosport (Magazine) 2) null (null)
  • 你应该编辑你的问题,因为这个错误不是问题的一部分。我将编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2011-11-04
  • 1970-01-01
  • 2012-03-24
  • 2019-04-30
  • 2020-05-02
  • 2022-01-13
相关资源
最近更新 更多