【问题标题】:Java array of Objects seems to be nullJava 对象数组似乎为空
【发布时间】:2014-09-26 19:31:50
【问题描述】:

我在学校的 Java 程序方面遇到了问题,你能帮帮我吗? 该程序应该让您在输入中给他一些书籍信息,例如标题,每本书的价格。现在我创建了一个对象数组,每个对象都应该有一个用于每个选项的私有变量(使用方法 setter 设置并使用方法 getter 声明)。 问题是我不知道错误在哪里,但程序只在输出中打印最后一个变量,即价格。其他的都是空的。 请问你能帮帮我吗? 主要:

    class Esercizio2
{
    public static void main(String[] args)
    {
        // Objects
        ConsoleReader2 keyboard = new ConsoleReader2(System.in);
        // Init
        int n = 0;  // book number
        // temp variables
        String title;
        String writer;
        String house;
        String price;
        // Calc
        System.out.println("How many books you wanna analyze?");
        do
        {
            n = keyboard.readInt();
            if (n <= 0)
            {
                System.out.print("You've inserted a negative or 0 number, you have to input a positive number, try again ===> ");
            }
        }
        while (n <= 0);
        // array of the books
        Libri2[] info = new Libri2[n];
        // through arrays
        for (int i = 0, j = 1; i < info.length; i++, j++)
        {
            // input title
            System.out.print("Input the title for book number " + j + " ===> ");
            title = keyboard.readLine();
            info[i] = new Libri2();
            info[i].setTitle(title);
            // input writer
            System.out.print("Input the writer for book number " + j + " ===> ");
            writer = keyboard.readLine();
            info[i] = new Libri2();
            info[i].setWriter(writer);
            // input house
            System.out.print("Input the house for book number " + j + " ===> ");
            house = keyboard.readLine();
            info[i] = new Libri2();
            info[i].setHouse(house);
            // input price
            System.out.print("Input the price for book number " + j + " ===> ");
            price = keyboard.readLine();
            info[i] = new Libri2();
            info[i].setPrice(price);
        }
        // Declaration
        for (int i = 0, j = 1; i < info.length; i++, j++)
        {
            System.out.print("The title of book number " + j + " is  ===> " + info[i].getTitle() + "\n");
            System.out.println("His features are:\n" + info[i].getWriter() + "\n" + info[i].getHouse() + "\n" + info[i].getPrice());
        }
    }
}

ConsoleReader2 是我用来代替 Scanner 的一个类,但它是一样的,readLine 是一种输入字符串的方法。 具有 setter 和 getter 方法的类:

    public class Libri2
{
    // attributs:
    private String title;
    private String writer;
    private String house;
    private String price;
    // methods: (setter e getter)
    // give title
    public String getTitle()
    {
        return this.title;
    }
    // set title
    public void setTitle(String m)
    {
        this.title = m;
    }
    // give writer
    public String getWriter()
    {
        return this.writer;
    }
    // set writer
    public void setWriter(String m)
    {
        this.writer = m;
    }
    // give house
    public String getHouse()
    {
        return this.house;
    }
    // set house
    public void setHouse(String m)
    {
        this.house = m;
    }
    // give price
    public String getPrice()
    {
        return this.price;
    }
    // set price
    public void setPrice(String m)
    {
        this.price = m;
    }
}

【问题讨论】:

    标签: java arrays string oop


    【解决方案1】:

    每次设置属性时,您都在重新创建和重置当前元素,例如

    info[i] = new Libri2();
    

    给你留下一个只有价格的对象数组。

    【讨论】:

      【解决方案2】:

      info[i]=new Libri2(); 作为for 循环的第一行并删除所有其他出现的info[i]=new Libri2();。 你得到错误输出的原因是因为你的 Libri2[] 数组中的每个对象都被重新初始化,在每次迭代之后给你最后一次初始化,即

      price = keyboard.readLine(); info[i] = new Libri2(); info[i].setPrice(price);

      【讨论】:

        猜你喜欢
        • 2013-02-10
        • 2015-04-09
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 2016-11-27
        • 2018-11-25
        • 2018-08-14
        相关资源
        最近更新 更多