Если бы вы создали объект в al oop, продолжал бы он воссоздавать этот l oop на каждой итерации? - PullRequest
2 голосов
/ 09 мая 2020
while(!input.equals("-1")){

    plantName = "";
    plantCost = "";
    colorOfFlowers = "";
    isAnnual = false;

    if (input.charAt(0) == 'p') {
        Plant plant = new Plant();
        String[] temp = input.split(" ");
        plantName = temp[1];
        plantCost = temp[2];
        plant.setPlantName(plantName);
        plant.setPlantCost(plantCost);
        myGarden.add(plant);

     }else {
         Flower flower = new Flower();
         String[] temp = input.split(" ");
         flower.setPlantName(temp[1]);
         flower.setPlantCost(temp[2]);

        flower.setPlantType(Boolean.parseBoolean(temp[3]));
         flower.setColorOfFlowers(temp[4]);
         myGarden.add(flower);

     }
     input = scnr.nextLine();
 }

Вот пример того, что я имею в виду. в начале оператора if я создал объект plant, и в итоге программа работала так, как я хотел, я просто не совсем уверен, почему это сработало. Я думаю, что, создавая объект внутри while l oop, он «удаляет» в конце l oop и создает новый.

Опять же, хотя я не уверен, потому что Каждый раз, когда я задаю своему профессору вопрос о какой-либо концепции, он говорит мне прийти сюда и спросить кого-нибудь. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Вы сохраняете копию, поэтому старый объект перезаписывается.

Object[] a = new Object[10];

for (int i = 0; i < 10; i++) {
    // ob gets copied over with the new object
    Object ob = new Object();
    // but it is saved here
    a[i] = ob;
}

Это ничем не отличается от этого.

int[] n = new int[10];
for (int i = 0; i < 10; j++) {
    int x = i*10;
    n[i] = x; // x is saved in array.
}
0 голосов
/ 09 мая 2020

Когда вы вызываете new Plant(), вы создаете новый экземпляр объекта Plant. Если вы его нигде не сохраните, он будет удален сборщиком мусора java, как только он покинет область видимости.

Что такое размах? Это в основном внутри фигурных скобок al oop, method if statement et c:

if( test == 5){
    Object instance1 = new Object();
    while(otherCondition == true){
        Object instance2 = new Object(); 
        // Now both instance1 and instance2 are in this scope 
    }
    // Now instance2 does is not longer in scope, and will be destroyed unless we store it somewhere.
}
//Now we do not have access to either instance1 and instance2 since they are both out of scope

Когда объекты покидают область видимости, это означает java, что мы закончили с ними, и он должен освободить их из памяти, если мы не укажем java их где-нибудь сохранить.

ArrayList<Object> list = new ArrayList<Object>();
if( test == 5){
    Object instance1 = new Object();
    list.add(instance1);
    while(otherCondition == true){
        Object instance2 = new Object(); 
        list.add(instance2);
    }

}

В этом втором примере, поскольку мы добавляем объекты в список, они сохраняются, и поэтому они не будут удалены.

В вашем случае это очень похоже на описанные выше случаи, но вместо оператора if это al oop. С циклами каждая новая итерация похожа на свою собственную область видимости, и поскольку вы где-то храните свои объекты Flower (с myGarden.add(flower);), они не удаляются, но каждая итерация l oop создает новый объект-цветок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...