for循环重置构造输入

时间:2014-04-20 13:13:20

标签: java eclipse for-loop constructor

代码如下:

System.out.println("How many types of food do the gerbils eat?");       
    int F = keyboard.nextInt();
    food = new food[F];

    for
        (int a = 0; a<F; a++){
        System.out.println("Name of food number " + (a+1));
        foodname = keyboard.next();
        System.out.println("Max amount of food " + (a+1));
        maximum = keyboard.nextInt();

        food[a] = new food(foodname, maximum);
        for (int n = 0; n<F; n++){
        System.out.println(food[n]);
        }
    }

我得到以下输出:

How many types of food do the gerbils eat?
2
Name of food number 1
p
Max amount of food 1
5
p 5
null
Name of food number 2
r
Max amount of food 2
5
r 5
r 5

如您所见,每次循环重启时,食物名称和食物最大值的新输入值都会重置。它为什么这样做,我如何解决它,以便它存储我的食物1名称和最大的原始输入?

分类食物:

public class food {

public static String foodname;
public static int maximum;


public food(String foodname, int maximum) {
this.foodname = foodname;
this.maximum = maximum;
}

public String getFood(){
return foodname;
}

public int getmaxamount(){
return maximum;
}

public String toString() {
return (this.getFood() + " " + this.getmaxamount());
}
}

2 个答案:

答案 0 :(得分:2)

在您的Food类中,您声明了

foodname
maximum

static。 这意味着,对于您创建的每种食物,这些值都是相同的。

如果你想要不同种类的食物,只需删除那些修饰符

答案 1 :(得分:0)

虽然这个问题已经得到解答,但我想我会继续添加:

  

有时,您希望拥有所有对象共有的变量。这是使用static修饰符完成的。在声明中具有static修饰符的字段称为静态字段类变量。它们与类相关联,而不是与任何对象相关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。

链接:http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html