如何使用循环创建新对象?

时间:2011-12-05 22:49:01

标签: java arrays class methods

基本上这就是我想做的事,

do{
    Object name = new Object();*Create new object*
    Object.method*run created object through a method*

    Scanner keyboard = new Scanner(System.in);
    System.out.println("Do you wish to continue entering data");
    String answer = keyboard.nextLine();   
 } while (answer.equalsIgnoreCase("Yes"))

我是否需要创建数组才能使其工作?如果是这样,那将如何运作?

5 个答案:

答案 0 :(得分:2)

取决于。如果对象具有状态(例如,表示数据库中的行),则必须为每次迭代创建它。但是如果你需要做的只是在对象中调用一个方法(即如果它是无状态的,(没有非静态和非最终的类变量或者是不可变的)),你应该只创建一个实例,并调用该方法在每次迭代中。一个例子是您的Scanner对象。您所做的只是在其中调用一个方法,因此您不是每次都创建一个新对象,而是在调用方法之前创建它,或者作为实例(类级别,理想私有)字段,以便可以重复使用它在所有方法中。以下是我重写代码的方法:

public class MyClass {

private final Scanner scanner = new Scanner(System.in);

public void doSomething() {
    Object object = new Object();
    do {
        // call your method here
        // object.yourMethod();

        System.out.println("Do you wish to continue entering data?");
    } while (scanner.nextLine().equalsIgnoreCase("Yes"));
}

}

OTHO如果你想存储与你创建的每个实例相关联的状态,那么你会这样做:

public class MyClass {

private final Scanner scanner = new Scanner(System.in);

public void doSomething() {
    List<Object> data = new ArrayList<Object>();
    Object object;
    do {
        // call your method here
        object = new Object();
        // object.yourMethod();
        data.add(object);

        System.out.println("Do you wish to continue entering data?");
    } while (scanner.nextLine().equalsIgnoreCase("Yes"));

    for(Object d : data) {
        // do something with the info you captured
    }
}

}

答案 1 :(得分:1)

您可以使用ArrayList

List<Object> names = new ArrayList<Object>();
Scanner keyboard = new Scanner(System.in);
String answer;
do {
    Object o = new Object();
    o.method();
    names.add( o );

    System.out.println("Do you wish to continue entering data");
    answer = keyboard.nextLine();
} while (answer.equalsIgnoreCase("Yes"));

答案 2 :(得分:1)

我会使用像数组列表这样的东西。因此,无论方法如何操作,您都可以执行do / while,并将对象添加到列表中:

List<Object> list = new ArrayList<Object>();
Object name;

do {

    name = new Object();
    name.method();

    list.add(name);

} while(answer.equalsIgnoreCase("Yes"));

这些方面的东西。

答案 3 :(得分:1)

如果您只是想让它运行程序(我假设方法),不会因任何原因而无需保存。

Object name;
Scanner scan = new Scanner(System.in);
String answer = "";

do {
    name = new Object();
    name.method();

    System.out.print("Do you wish to continue entering data? ");
    answer = scan.nextLine().toLowercase(); //Get the response
} while(!answer.equals("yes"); //If they didn't enter yes then the loop stops

此方法还可以节省内存,因为每次迭代循环都不会创建新的扫描程序或新内存。

答案 4 :(得分:0)

通常看起来像这样:

Collection<Object> objectCollection = new ArrayList<Object>();  
for(int i = 0; i < objectMax; i++)  
{  
    Object o = new Object();  
    o.doSomething();  
    objectCollection.add(o);  
}

如果你不想存储任何东西,那就是:

 for(int i = 0; i < objectMax; i++)  
    {  
        Object o = new Object();  
        o.doSomething();  
    }