为什么我的程序会重复。 Java错误

时间:2015-04-28 07:02:16

标签: java arraylist java.util.scanner do-while

我应该让程序给出宠物的数量以及低于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 Class,它被正确编译并用于数组。

 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());
          }
        };
    }

2 个答案:

答案 0 :(得分:1)

Array ( [0] => 5 [1] => 10 [2] => 15 ) 之后移动keyboard.nextLine();以使用悬空换行符。

答案 1 :(得分:0)

您可能想要进行一些更改。 1.每次检索宠物姓名,年龄和体重的用户输入。您可能希望创建pet类型的对象来存储此值,然后将其添加到ArrayList中。在你问他们是否愿意添加另一只宠物之前。 2.删除外部do while循环,并更改inter循环以包含“输入宠物名称的字符串:”。 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"));