Как найти наименьшую переменную из списка объектов? (ДЖАВА) - PullRequest
0 голосов
/ 07 июля 2019

Код не показывает ошибок.Тем не менее, я получаю неожиданный вывод. Я должен получить наименьшее число для возраста, но то, что я продолжаю получать, это последнее значение, введенное для возраста.Можете ли вы помочь мне указать на ошибки в этом коде?

Может быть, есть логическая ошибка в методе getYoungestPet () ?

package pet;

public class Pet 
{
    public static String petName; 
    public static int petAge, petWeight;
    int youngestAge=9999;
    static int test;




    public static String setPetName()
    {
      return petName;
    }

    public int setPetAge()
    {

        return petAge;
    }

    public int setPetWeight()
    {

        return petWeight;
    }


    public int getYoungestPet() //probably an error here..?
    {

        if (petAge<youngestAge)
            youngestAge=petAge;
        return youngestAge;

    }



}

package pet;
import java.util.Scanner;
public class PetMain extends Pet
{


    public static void main(String[] args)
    {

    System.out.println("How many pets do you want to enter? " ); 
    Scanner data= new Scanner(System.in);

    int petNumber=data.nextInt();

    for (int i = 1;i<=petNumber; i++)
    {
    Pet PetObject = new Pet(); 

    System.out.println("Please enter name for Pet " + i );  
     Scanner input = new Scanner(System.in);
       petName= input.next();        
    System.out.println("Your pet's name is : " + petName);
    System.out.println(" ");

    System.out.println("Please enter " + petName + "'s Age" );
       petAge= input.nextInt();    
    System.out.println("Your pet's age is : " + petAge);
    System.out.println(" ");

    System.out.println("Please enter " + petName + "'s Weight" );
        petWeight= input.nextInt();
    System.out.println("Your pet's weight is : " + petWeight);
    System.out.println(" ");                

        System.out.println(PetObject.getYoungestPet());

    }


}
}

Код должен указывать наименьший возраст, но он показывает последний введенный возраст.

Ответы [ 3 ]

2 голосов
/ 07 июля 2019

вы должны объявить youngestAge как статическую переменную. так что все petObject могут иметь одинаковое значение.

static int youngestAge=9999;

Ваши методы установки и получения также не являются правильными.

public static String setPetName()
{
  return petName;
}

должно быть:

public static void setPetName(String name)
{
  petName=name;
}

Также не забудьте установить значения в PetObject из метода main.

...
petName= input.next(); 
PetObject.setPetName(petName);
...
0 голосов
/ 07 июля 2019

Есть много вещей, которые проблематичны с этим кодом.

Но просто чтобы ответить на ваш вопрос напрямую, подумайте о том, сколько объектов pet может быть в этой программе, если при каждом запуске цикла for он воссоздает объект pet, потому что он находится внутри цикла for. однако простое перемещение его за пределы цикла for не поможет, потому что тогда вы просто будете продолжать сбрасывать значения одного и того же объекта pet при каждом запуске цикла for. Подумайте о создании массива домашних животных.

Кроме того, ваш код никогда не обращается к переменным экземпляра объектов-питомцев

Кроме того, есть другие проблемы с использованием статического, как указали другие. веселит.

0 голосов
/ 07 июля 2019

Каждый раз, когда вы создаете Pet , вы получаете различное youngestAge со значением 9999 для этого объекта. Таким образом, каждый раз он сравнивает последние petAge с 9999 и дает вам последние petAge , так как введенный вами petAge меньше 9999.

Если вам нужно хранить наименьший возраст, храните его в статическом поле. Причина сохранения избыточного поля для хранения наименьшего возраста для всех объектов избыточна для памяти.

Если вы хотите получить желаемый результат с существующим дизайном, сделайте следующее:

Сделать youngestAge статическим:

static int youngestAge=9999;

А также не забудьте сделать метод статичным. Больше нет необходимости делать его объектным свойством, обе переменные поля, которые он использует, являются статическими.

public static int getYoungestPet()
{
    if (petAge<youngestAge)
        youngestAge=petAge;
    return youngestAge;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...