如何在循环中使用此set方法

时间:2014-09-19 08:54:57

标签: java arrays

这是一个家庭作业问题,所以我最好尽可能多地编写代码,只需要一个指针。

我有一个名为Sandwich的类,它有一个设置主要成分的方法和其他一些东西 -

public class Sandwich {

private String mainIngredient, bread;


String getMainIngredient(){
    return mainIngredient;
    }

void setMainIngredient(String mainIng){
    mainIngredient = mainIng;
}

 void setBread(String dough){
    bread = dough;
}


 void setPrice(double cost){
    price = cost;
}

现在在另一个班级TestSandwich我初始化了一个数组,作为问题的一部分;

Sandwich[] sandwiches = new Sandwich[5];

现在我需要做的是循环并每次为mainIngredient和bread分配一个值。 我想我会想做一些事情,但我不确定如何正确地做。

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

        System.out.println("Insert a main ingredient");
        String userInput = sc.next();

        sandwiches[i].setBread(userInput);

        System.out.println("Insert a bread");
        userInput = sc.next();

        sandwiches[i].setMainIngredient(userInput);


        System.out.println(sandwiches[i].getMainIngredient());
        System.out.println("");

}

主要问题是 - sandwiches[i].setMainIngredient(userInput); 我对数组和方法没有多少经验,所以任何有关正确语法的帮助都会很棒。

由于

2 个答案:

答案 0 :(得分:3)

Sandwich[] sandwiches = new Sandwich[5];创建一个包含5个null引用的数组。

您需要自己初始化每个元素;在你的循环中写

sandwiches[i] = new Sandwich();

否则你会得到NullPointerException。完成后,您可以像现在一样调用设置方法。继续前进,您可以声明一个两个参数构造函数,将面包和主要成分作为参数。这是更好的风格,因为(i)你避免了建立者和(ii)对象在建筑和使用之间处于不明确的状态。

答案 1 :(得分:0)

Sandwich[] sandwiches = new Sandwich[5];

这会分配一个数组来容纳5个三明治,但它不会创建任何三明治。只是数组。您正准备在循环中创建三明治。

当你编写这个循环时,而不是迭代到5,最好使用sandwiches.length,这样如果你想要10个而不是5个三明治,你可以在一个地方改变数字而不是2.它会更安全,更不容易出错:

for (int i = 0; i < sandwiches.length; ++i) {
    // TODO: get the ingredients from user

    // ready to create the sandwich, yum yum
    Sandwich sandwich = new Sandwich();
    sandwich.setBread("...");
    sandwich.setMainIngredient("...");
    sandwiches[i] = sandwich;
}