I'm writing a program that reads information from three seperate classes. Here is my code:

public class Animal
{
   protected int id;
   protected String type;
   protected double mass;
 
    //------------------------------------------------------------------------
    //  Sets up an animal with the specified ID number, type and weight.
    //------------------------------------------------------------------------
 
   public Animal (int animalID, String animalType, double weight)
   {
      id = animalID;
      type = animalType;
      mass = weight;
   }
 
   //------------------------------------------------------------------------
   //  Returns information about this animal as a string.
   //------------------------------------------------------------------------
 
   public String toString()
   {
      String description = "ID: " + id + "\n";
 
      description += "Type: " + type + "\n";
      description += "Weight: " + mass + "\n"; 
 
      return description;  
   }
}
public class Pet extends Animal
{
   private String title;
   private String own;
 
   //------------------------------------------------------------------------
   //  Sets up a pet using the specified information.
   //------------------------------------------------------------------------
 
   public Pet (int animalID, String animalType, double weight, String name, String owner)
   {
      super (animalID, animalType, weight);
 
      title = name;
      own = owner;
   }
 
   //------------------------------------------------------------------------
   //  Returns information about this pet as a string.
   //------------------------------------------------------------------------
 
   public String toString()
   {
      String description = super.toString();
 
      description += "Name: " + title + "\n";
      description += "Owner: " + own + "\n"; 
 
      return description;  
   }
}
public class ZooAnimal extends Animal
{
   private int cage;
   private String train;
 
   //------------------------------------------------------------------------
   //  Sets up a zoo animal using the specified information.
   //------------------------------------------------------------------------
 
   public ZooAnimal (int animalID, String animalType, double weight, int cageNumber, String trainer)
   {
      super (animalID, animalType, weight);
 
      cage = cageNumber;
      train = trainer;
   }
 
   //------------------------------------------------------------------------
   //  Returns information about this zoo animal as a string.
   //------------------------------------------------------------------------
 
   public String toString()
   {
      String description = super.toString();
 
      description += "Cage: " + cage + "\n";
      description += "Trainer: " + train + "\n";
 
      return description;
   }
}
import java.util.Scanner;
import java.util.StringTokenizer;
import java.io.*;

public class FileRead
{
   public static void main (String[] args) throws FileNotFoundException
   {
      Scanner scan = new Scanner(new File("animal.txt"));
      String animalType = null, name = null, trainer = null, owner = null, lineIn = null;
      int animalID = 0, cageNumber = 0;
      double weight = 0.0;
      StringTokenizer st = null;
      Animal animal = null;
      Pet pet = null;
      ZooAnimal zooAnimal = null;

      while (scan.hasNextLine())
      {
         lineIn = scan.nextLine();
         st = new StringTokenizer(lineIn, ",");
         animalID = Integer.parseInt(st.nextToken());
         animalType = st.nextToken();
         weight = Double.parseDouble(st.nextToken());			

         if (animalID <= 8000 && animalID > 9999)
         {
            cageNumber = Integer.parseInt(st.nextToken());
            trainer = st.nextToken();
            zooAnimal = new ZooAnimal(animalID, animalType, weight, cageNumber, trainer);
            System.out.println(zooAnimal);
         }
			
	 if (animalID <= 3000 && animalID > 7999)
         {
            name = st.nextToken();
            owner = st.nextToken();
            pet = new Pet(animalID, animalType, weight, name, owner);
            System.out.println(pet);
         }
			
         else
	 {
            animal = new Animal (animalID, animalType, weight);
            System.out.println(animal);
         }
      }
   }
}

The following code segment is animal.txt

3000,Monkey,38.6
7999,Ape,65.2,
8000,Dog,13.4,Thomas,George,
5252,Giraffe,130.3,103,Samuel,

I want my program to be able to distinguish the different ID numbers from the above classes, so it knows which ID number is an animal, pet or zoo animal. The ID number between 1000 and 2999 is an animal, the ID number between 3000 and 7999 is a pet and an ID number between 8000 and 9999 us a zoo animal. Any ID number which is less than 1000 or greater than 9999 should be considered invalid records. That way, it will know when to display a "zoo animal", a "pet" or an "animal". Whenever I run my program, all it displays the ID number, the animal type and the weight. The below is what I'm trying to aim for:

ID: 3000
Type: Monkey
Weight: 38.6

ID: 7999
Type: Ape
Weight: 65.2

(The above from the animal class)

ID: 8000
Type: Dog
Weight: 13.4
Name: Thomas
Owner: George

(The above from the pet class)

ID: 5252
Type: Giraffe
Weight: 130.3
Cage Number: 103
Trainer: Samuel

(The above from the zoo animal class)

First of all the last else should be an if. Since you say that animal has to be [1000,2999] then it is possible the else to be executed even if that is not true. If ID is 100 for example. You should also have an if for the invalid IDs or put them all in else-if.

Also this will NEVER be true: (animalID <= 3000 && animalID > 7999) If ID = 4000:
animalID <= 3000: (4000<=3000) FALSE
animalID > 7999: (4000>7999) FALSE

But if you do this: (animalID >= 3000 && animalID <= 7999) If ID = 4000:
animalID <= 3000: TRUE
animalID > 7999: TRUE

First of all the last else should be an if. Since you say that animal has to be [1000,2999] then it is possible the else to be executed even if that is not true. If ID is 100 for example. You should also have an if for the invalid IDs or put them all in else-if.

Also this will NEVER be true: (animalID <= 3000 && animalID > 7999) If ID = 4000:
animalID <= 3000: (4000<=3000) FALSE
animalID > 7999: (4000>7999) FALSE

But if you do this: (animalID >= 3000 && animalID <= 7999) If ID = 4000:
animalID <= 3000: TRUE
animalID > 7999: TRUE

Ah! Thank you very much.

This question has already been answered. Start a new discussion instead.