Имате нужда от помощ при създаването на програма, която намира най-лекото и най-тежкото куче

Имам огромен проблем с този 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
В момента програмата отпечатва само последната част от файла. Ако заменя dogs.get(1).getWeight(); с dogs.get(0).getWeight(); Получавам грешка java.lang.IndexOutOfBoundsException.   -  person    schedule 11.09.2014
comment
Разгледайте anser тук: 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 (първо тегло › следващо тегло) { следващо тегло = първо тегло; } System.out.println(първо тегло);*/ } - person ; 11.09.2014
comment
Виждам какво се опита да направиш. Мисля, че това би било по-скоро. двойно леко тегло = 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 ‹ newweight) { тежко Тегло = newweight; }} - 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