Gerald Lim
Gerald Lim

Reputation: 33

Program will not print the statement

I have a program where i select an option to add ship, which prompts me to give an id e.g b 2. it then prompts me to enter a capacity. However, I am using a search method to prevent any repeat id's that I may enter a second time round. The program compiles, but my statement "Ship id is already in use" won't print out. Any ideas please?

Here is my code.

public int search(String id)
{
    for(int index = 0; index < ships.length && ships[index] != null; ++index)
    {
        shipId = id;
        if (ships[index].getId().equals(id))
        {
            return index;
        }
    }
    //ship id not found so you can add ship
    return -1;
}

public void addShip( )
{
    System.out.println("Enter ship id >> ");
    String id = kb.nextLine();
    if(id.equals(search(id)))
    {
        System.out.println("Ship id already in use");
        return;
    }


    else
    {
        //for(int i = 0; i < ships.length; ++i)
        {
            System.out.println("Enter ship capacity");
            int capacity = kb.nextInt();
            ships[shipCounter++] = new Ship(id, capacity);
        }
    }
}

Here is my ship class:

public class Ship
{
    private String id;
    private int capacity;
    private int currentCrew; // index into the Crew array
                             // points to the next free space
                             // in the Crew array
    private String status;

    private Crew [ ] crew;

    public Ship(String id, int capacity)
    {
        this.id = id;
        this.capacity = capacity;
        this.currentCrew = 0;
        crew = new Crew[capacity];

    }
    public Ship(String id, int capacity, String status)
    {
        this.id = id;
        this.capacity = capacity;
        this.status = "available";
        this.currentCrew = 0;
        crew = new Crew[capacity];

    }
    public void setId(String newId)
    {
        id = newId;
    }
    public void setCapacity(int newCapacity)
    {
        capacity = newCapacity;
    }
    public void setStatus(String newStatus)
    {
        if(status.equals("available"))
        {
            newStatus = "on station";
            status = newStatus;
        }
        else if(status.equals("on station"))
        {
            newStatus = "maintenance";
            status = newStatus;
        }
        else if(status.equals("station") || status.equals("maintenance"))
        {
            newStatus = "available";
            status = newStatus;
        }
        else
        {
            System.out.println("Invalid status");
        }
    }
    public String getId()
    {
        return id;
    }
    public String getStatus()
    {
        return status;
    }
    public int getCapacity()
    {
        return capacity;
    }
    public int getCurrentCrew()
    {
        return currentCrew;
    }
    public void addCrew()
    {
        //if(currentCrew < capacity)
        {
            //System.out.println("Enter crew id >> ");
            //String id = kb.nextLine();
        }
    }

    public String toString()
    {

        String sdesc = 
         '\n'
        + "Ship"
        + '\n'
        + "["
        + '\n'
        + " "
        + "Id: " + id
        + " capacity: " + capacity
        + " current crew: " + currentCrew
        + " status: " + status
        + '\n'
        + "]";

        return sdesc;
    }
}

Upvotes: 0

Views: 38

Answers (2)

OneCricketeer
OneCricketeer

Reputation: 191711

If you'd like to see if you already have a ship with the id, you should check that the index exists, which is what your search method returns.

 if(search(id) > 0)
 {
      System.out.println("Ship id already in use");
      return;
 }

Upvotes: 0

subash
subash

Reputation: 3140

Did you noticed this line

 if(id.equals(search(id)))

id is String type, but search return type is int.

if you see in String class equals method,

 if (anObject instanceof String) {

 }
 return false;

so its simply give false always

so the simple solution is convert that int to String. something like

if(id.equals(search(id+"")))

Upvotes: 2

Related Questions