为什么我的程序在重复java错误

fykwrbwg  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(279)

我应该让程序给出宠物的数量,以及低于5磅、5-10磅和超过10磅的宠物数量的百分比。程序不断重复这些语句,我不知道为什么。在过去的几天里,我一直在研究这个问题,但我还是搞不懂。有时我好像把它修好了,但后来又发生了。有人能解释为什么会这样吗?我需要帮助。

import java.util.*;
import java.util.Collections;
import java.util.Comparator;
import java.lang.Object;

public class SetPetWeight 
{
  public static void main(String[] args) {
    ArrayList<Pet> list = new ArrayList<Pet>();
    String name;
    String answer;
    int age;
    Double weight;
    Scanner keyboard = new Scanner(System.in);

    do
{

      System.out.println("Enter a String for Pet name: ");
      name = keyboard.next(); 

      System.out.println("Enter an int for Pet age: ");
      age = keyboard.nextInt();
      if(age <= 0)
        System.out.println("Error! Enter a real age");

      System.out.println("Enter a double for Pet weight: ");
      weight = keyboard.nextDouble();
      if(weight <= 0)
        System.out.println("Error! Enter a real weight");

                do
      {
        System.out.println("Do you want to enter another pet? Y/N");
        answer = keyboard.nextLine();
          keyboard.nextLine();
      } while (answer.equalsIgnoreCase("Y"));

    } while (name.length() < 0 && age < 0 && weight < 0);

    System.out.println("The weight is now sorted by weight!");
    Collections.sort(list, Pet.SortByWeight);
    for (Pet p2 : list)
      p2.writeOutput();

    int average1 = 0;
    int average2 = 0;
    int average3 = 0;

    for (Pet p : list)
    {
      if(p.getWeight() >= 0 && p.getWeight() <= 5)
      {
        ++average1;
      }
      else if(p.getWeight() >= 5 && p.getWeight() <= 10)
      {
        ++average2;
      }
      else if(p.getWeight() > 10)
      {
        ++average3;
      }
      System.out.println("The average of pets under 5 pounds:" + average1);
      System.out.println("The average of pets between 5 and 10 pounds:" +  average2);
      System.out.println("The average of pets over 10 pounds:" + average3);

    }
  }
}

用于setpetweight类并正确编译并用于数组的pet类。

import java.util.*;

    public class Pet {
        private String name;
        private Integer age; // in years
        private double weight; // in pounds

        public void writeOutput() {
            System.out.println("Name: " + name);
            System.out.println("Age: " + age + " years");
            System.out.println("Weight: " + weight + " pounds");
        }

        public void set(String newName) {
            name = newName;
            // age and weight are unchanged.
        }

        public void set(int newAge) {
            if (newAge <= 0) {
                System.out.println("Error: illegal age.");
                System.exit(0);
            } else
                age = newAge;
            // name and weight are unchanged.
        }

        public void set(double newWeight) {
            if (newWeight <= 0) {
                System.out.println("Error: illegal weight.");
                System.exit(0);
            } else
                weight = newWeight;
            // name and age are unchanged.
        }

        public Pet(String name, int age, double weight) {
            this.name = name;
            this.age = age;
            this.weight = weight;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        public double getWeight() {
            return weight;
        }

        public static Comparator<Pet> SortByWeight = new Comparator<Pet>() 
        {
          public int compare(Pet pet1, Pet pet2)
          {
            return (int)(pet1.getWeight() - pet2.getWeight());
          }
        };
    }
h7wcgrx3

h7wcgrx31#

移动 keyboard.nextLine(); 之后 weight = keyboard.nextDouble(); 使用悬挂的换行符。

68bkxrlz

68bkxrlz2#

您可能需要做一些更改。1.每次你检索用户输入的宠物的名字,年龄和体重。您可能需要创建一个pet类型的对象来存储这些值,然后将其添加到arraylist中。在你问他们是否想再添一只宠物之前。2.移除外部do while循环,并将inter循环更改为包含“enterastringforpetname:”。3.还要检查输入的有效性。

do {
  System.out.println("Enter a String for Pet name: ");
  name = keyboard.next(); 
  System.out.println("Enter an int for Pet age: ");
  age = keyboard.nextInt();
  if(age <= 0)
    System.out.println("Error! Enter a real age");

  System.out.println("Enter a double for Pet weight: ");
  weight = keyboard.nextDouble();
  keyboard.nextLine();
  if(weight <= 0)
      System.out.println("Error! Enter a real weight");

  System.out.println("Do you want to enter another pet? Y/N");
  answer = keyboard.nextLine();
  keyboard.nextLine();
  } while (answer.equalsIgnoreCase("Y"));

相关问题