对象数组仅包含最后一个

时间:2015-12-08 10:00:52

标签: java arrays object

我用Java编写了一个notebook类,其中包含笔记本的属性(其中3个),要求用户输入它们,然后它包含一个显示它们的函数。

第二个类notebookArray声明一个上面声明的类型为notebook的数组。问题是,在我读取了许多元素然后我想显示它们之后,数组的每个元素都包含上次读取的属性。

以下是代码:

notebook.class

import java.util.Scanner;
public class notebook{
static String colour;
static String company;
static String model;



static void readOne(){
   System.out.println("Company?");
   Scanner in=new Scanner(System.in);
   company=in.next();
   System.out.println("Model?");
   model=in.next();
   System.out.println("Colour?");
   colour=in.next();
}

static void showOne(){
   System.out.println(company);
   System.out.println(model);
   System.out.println(colour);
}

}

notebookArray.class

import java.util.*;
public class notebookArray{

static List<notebook> arrayOfNotebooks=new ArrayList<>();
static int n;
static notebook a;
public static void main(String[] args){
   addMore();
   showMore();
}
static void addMore(){

   System.out.println("How many notebooks would you like to add?");
   Scanner keyboard=new Scanner(System.in);

   n=keyboard.nextInt();

   for(int i=0;i<n;i++)
   {

      a=new notebook();
      a.readOne();
      arrayOfNotebooks.add(a);
   }
}

static void showMore(){
   for(notebook p : arrayOfNotebooks)
   {
      p.showOne();
   }
}
}

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您的问题是notebook班级中的静态成员:

static String colour;
static String company;
static String model;

删除static关键字,因为您希望每个notebook实例具有不同的值。

您的方法readOneshowOne也不应该是静态的,因为它们应该与非静态成员一起使用。

答案 1 :(得分:2)

您已在课程中创建了静态变量。哪些是导致问题的原因。把它变成正常变量

static String colour;
static String company;
static String model;

String colour;
String company;
String model;

答案 2 :(得分:0)

notebookArray中,您只有一个静态notebook对象:

static notebook a;

您不断重新启动并添加到ArrayList;因此它们都是一样的:

for(int i=0;i<n;i++)
{
    a=new notebook();
    a.readOne();
    arrayOfNotebooks.add(a);
}

删除静态notebook成员并更改此循环以创建新的笔记本实例,然后在每次迭代中将其添加到ArrayList

for(int i=0;i<n;i++)
{
    notebook a=new notebook();
    a.readOne();
    arrayOfNotebooks.add(a);
}

正如其他人所说,notebook的成员和方法也不应该是静态的;这也会引起你所看到的问题。