避免覆盖构造函数内容

时间:2014-12-14 03:47:22

标签: java methods input constructor getter-setter

所以我有一个程序,询问(输入)东西(变量int字符串等..),然后那些元素传递给构造函数。但是,每次我输入新值,之前都被覆盖。我怎么做让它创建一个新的而不是覆盖以前的值?我是Java的新手,我有点混淆。看看我的代码:

    Scanner scan1 = new Scanner(System.in);   //user input the name
    System.out.print("name: \n");
    String name = scan1.nextLine();

然后将其传递给构造函数:

Balloon aballoon = new Balloon(name);

我的构造函数看起来像

  public Balloon(String name){


        setName(name);

及其方法

public String thename
public void setName(String name){
if(name.matches("[a-zA-Z]+$")){  
thename = name;
}

所以是的,我想知道如何构建多个对象(字符)whitout覆盖前一个,以及如何存储它们(角色)。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用ArrayList<Balloon>存储多个Balloon个对象:

ArrayList<Balloon> baloons = new ArrayList<Balloon>;

//Read name

baloons.add(new Balloon(name));

//baloons now contains the baloon with the name name 

有关如何使用ArrayList课程的详情,请参阅Class ArrayList<E>

答案 1 :(得分:1)

我使用类似于以下内容的循环来存储用户想要的所有气球:

List<Balloon> balloonList = new ArrayList<>();
Scanner input  = new Scanner(System.in);
String prompt="Name?(Enter 'done' to finish inputting names)";



System.out.println(prompt);                 //print the prompt
String userInput=input.nextLine();          //get user input

while(!userInput.equals("done")){           //as long as user input is not
                                            //"done", adds a new balloon
                                            //with name specified by user
    balloonList.add(new Balloon(userInput));
    System.out.println(prompt);             //prompt user for more input
    userInput=input.nextLine();             //get input
}

对于修改,我假设您希望使用其名称找到气球(IE:如果有人想删除/修改名称为&#34的气球; bob&#34;,它将删除/修改ArrayList中名为&#34; bob&#34;的第一个气球。

对于删除,很简单 - 写一个简单的方法来查找指定的气球(如果它在列表中)并删除它。

public static boolean removeFirst(List<Balloon> balloons, String balloonName){
    for(int index=0;index<balloons.size();index++){//go through every balloon
        if(balloons.get(index).theName.equals(balloonName){//if this is the ballon you are looking for
            balloons.remove(index);//remove it
            return true;//line z
        }
    }
    return false;
}

此方法将查找由name指定的Balloon并删除它的第一个实例,如果实际找到并移除了气球,则返回true,否则将其删除。如果要删除该名称的所有气球,可以在方法的开头创建一个布尔值b并将其设置为false。然后,您可以将行z更改为

b=true;

然后在方法的底部,返回b。

现在,通过编辑,你可能意味着两件事之一。如果您正在计划修改气球的实际名称,您可以使用类似我上面制作的循环,只需在找到它时修改名称,再次可以使用该名称修改所有气球,或者只是你找到的第一个。

或者,如果通过修改气球意味着使用具有不同名称的新气球替换ArrayList中的气球,则需要使用以下方法:

balloons.remove(i);//remove balloon at index
balloons.add(i,newBalloon);//put the new balloon(with different data) at the index of the old one