我用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();
}
}
}
感谢您的帮助!
答案 0 :(得分:2)
您的问题是notebook
班级中的静态成员:
static String colour;
static String company;
static String model;
删除static关键字,因为您希望每个notebook
实例具有不同的值。
您的方法readOne
和showOne
也不应该是静态的,因为它们应该与非静态成员一起使用。
答案 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
的成员和方法也不应该是静态的;这也会引起你所看到的问题。