Нужна помощь в создании программы, которая находит самую легкую и самую тяжелую собаку.

У меня огромные проблемы с этим Java-проектом. Мне нужно написать класс, который отслеживает имя, породу, дату и вес собаки. Я должен ввести файл, содержащий одну строку для каждой собаки. Мне нужен аксессор, модификатор, Arraylist и метод toString. Затем основная программа должна определить самую легкую и самую тяжелую собаку.

import java.io.*;
import java.util.*;
import java.util.ArrayList;

public class Kennel
{

 public static void main(String args[]) 
 {

  String line = ""; // string var to hold entire line

  if (args.length < 1)
   {
    System.out.println("\n   You forgot to put a file name on the command line.");
    System.exit(1);
   };


   String inFile = args[0];  // file name off command line
   Scanner sc = null;
    try
   {
   sc = new Scanner(new File(inFile));
   }
   catch (Exception e)
   {
    System.out.println("File not found");
    System.exit(1);
     }

     // print a message explaining the purpose of the program.
    System.out.println("\nThis program inputs file ");
    System.out.println(args[0]);
    System.out.println("and outputs information about all the dogs in the registry.");
    System.out.println("\nWritten by Phil Trout.");
    System.out.println();
    System.out.println("Property           "+"Name                   "+"Value         ");
    System.out.println();
    // Loop

   //double heaviest = 0.0;
   //double lightest = 1000.0;  

     while(sc.hasNextLine())
    {

    // read a line from the input file via sc into line
    line = sc.nextLine();

    }

    {
    //got from  email infromation   


    StringTokenizer stk = new StringTokenizer(line);
    String name = stk.nextToken();
    String breed = stk.nextToken();
    int month = Integer.parseInt(stk.nextToken());
    int day = Integer.parseInt(stk.nextToken());
    int year = Integer.parseInt(stk.nextToken());
    double weight = Double.parseDouble(stk.nextToken());



    Dog list = new Dog(name, breed, month, day, year, weight);

    ArrayList<Dog> dogs = new ArrayList<Dog>();
    dogs.add(list);

    double firstweight = dogs.get(0).getWeight();

    System.out.println(firstweight);         


    for (int i = 0; i< dogs.size(); i++)
   {
   double newweight = dogs.get(i).getWeight();       
   }








 public class Dog
 {
  private String dogName;
  private String dogBreed;
  private int dogMonth;
  private int dogDay;
  private int dogYear;
  private double dogWeight;

public Dog(String name, String breed, int month, int day, int year, double weight)
{
  dogName = name;
  dogBreed = breed;
  dogMonth = month;
  dogDay = day;
  dogYear = year;
  dogWeight = weight;
 } 
  public String getName()
{
 return dogName;
 }

public String getBreed()
{
return dogBreed;
}
public String toString()
{
return String.format("%d/%d/%d", dogMonth, dogDay, dogYear);





}
public double getWeight()
{
return dogWeight;
}

person Community    schedule 10.09.2014    source источник
comment
Решите эту проблему один за другим. Что происходит прямо сейчас? Можете ли вы даже заставить его работать? Какие результаты вы получаете? Вы должны быть в состоянии понять свой собственный код, чтобы мы могли помочь вам   -  person KRUKUSA    schedule 11.09.2014
comment
Взгляните на Math.min и Math.max.   -  person MadProgrammer    schedule 11.09.2014
comment
Прямо сейчас программа печатает только последнюю часть файла. Если я заменил ogs.get(1).getWeight(); с собаками.get(0).getWeight(); Я получаю ошибку java.lang.IndexOutOfBoundsException.   -  person    schedule 11.09.2014
comment
Взгляните на ответ здесь: stackoverflow.com/questions/23550817/. Вы можете решить свою проблему аналогичным образом.   -  person Tom    schedule 11.09.2014
comment
› В данный момент программа печатает только последний вес файла. Подумайте, что это может означать, навскидку, я могу представить только четыре сценария: 1. Вы вручную печатаете только последний вес 2. Вы добавьте только один вес, последний 3. Вы продолжаете читать один и тот же вес 4. Все веса одинаковы. Уточните, какой из них возможен, и у вас будет ответ.   -  person NESPowerGlove    schedule 11.09.2014


Ответы (1)


Есть пара вещей, которые вы сделали правильно, но разместили их не в том месте. а) извлечение значений из строки, б) создание экземпляра собаки, в) добавление собаки в список, все это должно происходить внутри цикла. В противном случае вы получите только последнее значение в файле.

   ArrayList<Dog> dogs = new ArrayList<Dog>(); 

 while(sc.hasNextLine())
{

// read a line from the input file via sc into line
  line = sc.nextLine();
  StringTokenizer stk = new StringTokenizer(line);
  String name = stk.nextToken();
  String breed = stk.nextToken();
  int month = Integer.parseInt(stk.nextToken());
  int day = Integer.parseInt(stk.nextToken());
  int year = Integer.parseInt(stk.nextToken());
  double weight = Double.parseDouble(stk.nextToken());

  Dog list = new Dog(name, breed, month, day, year, weight);

  dogs.add(list);

}

Обновить

 int lightestIndex = 0;
 int heaviestIndex = 0;

for (int i = 0; i< dogs.size(); i++)
{
   if(dogs.get(i).getWeight() <= dogs.get(lightestIndex).getWeight()){
      lightestIndex = i;
   } 

   if(dogs.get(i).getWeight() >= dogs.get(heaviestIndex).getWeight()){
      heaviestIndex = i;
   }        
}


 System.out.println("The Lightest dog is " + dogs.get(lightestIndex).toString());
 System.out.println("The Heaviest dog is " + dogs.get(heaviestIndex).toString());
person Ferox    schedule 10.09.2014
comment
Или вы можете показать мне, что вы пробовали для второй части вопроса, и тогда я включу остальную часть ответа. - person Ferox; 11.09.2014
comment
for (int i = 0; i‹ dogs.size(); i++) { double newweight = dogs.get(i).getWeight(); } //двойной следующий вес = dogs.get(i).getWeight(); } /*if (firstweight › nextweight) { nextweight = firstweight ; } System.out.println(первый вес);*/ } - person ; 11.09.2014
comment
Я вижу, что ты пытался сделать. Я думаю, что это было бы больше похоже на это. двойной lightWeight = dogs.get(0).getWeight(); двойной тяжелый вес = dogs.get(0).getWeight(); for (int i = 0; i‹ dogs.size(); i++) { double newweight = dogs.get(i).getWeight(); if (lightWeight › newweight) { lightWeight = newweight ; } if (heavyWeight ‹ новый вес) { HeavyWeight = новый вес; } } - person Ferox; 11.09.2014
comment
Не могли бы вы помочь мне с частью toString в классе Dog. Мне нужен день, месяц, год и вес в нем. - person ; 11.09.2014
comment
Затем вам просто нужно включить его в метод toString(). Вы можете проверить форматирование строк здесь. udemy.com/blog/java-format-string - person Ferox; 11.09.2014