Java: method not working

余生长醉 提交于 2019-12-12 07:03:55

问题


I am creating a program that simulates some people catching fish in a lake, I already created classes for Fish and Pond and I was working on the Fisher class and a method is not working and I'll show the code (I'm new to programming so I'm not sure if I am providing enough information)

public class Fisher {

  public static int LIMIT = 3;
  private String     name;
  private Fish[]     fishCaught = new Fish[LIMIT];
  private int        numFishCaught;
  private int        keepSize;

  public Fisher(String name, Fish[] fishCaught, int numFishCaught, int keepSize) {

    this.name = name;
    this.fishCaught = fishCaught;
    this.numFishCaught = numFishCaught;
    this.keepSize = keepSize;
  }

  public String getName() {
    return name;
  }

  public Fish[] getFishCaught(){
    return fishCaught;
  }

  public int getNumFishCaught() {
    return numFishCaught;

  }

  public int getKeepSize() {
    return keepSize;
  }

  public String toString() {
    return (name + " with " + numFishCaught + " fish");
  }

  public void keep(Fish f) {
    if (numFishCaught == LIMIT) {
    } else {
      numFishCaught++;
      fishCaught[numFishCaught-1] = f;
    }

  }

  boolean likes(Fish f) {
    if ((f.getSize() >= keepSize) && !(f.getSpecies().equalsIgnoreCase("Sunfish"))) {
      return true;
    }
     return false; 
  }

  public void listFish(){
    System.out.println(name + " with " + numFishCaught + " as follows: ");
    for (int i = 0; i<numFishCaught; i++){
      Fish f = new fish[i];
      System.out.println("A " + f.getSize() + " cm " + f.getFishCaught());
    }
  }

}

the problem is the listFish() method, it's supposed to return something like this:

Bob with 2 fish as follows:
A 4 cm Pike
A 15 cm Bass

but it's not working it gives me "incompatible types" and "cannot find symbol" errors??

(just to make your life easier i'll include the Fish class too)

public class Fish {

  private String      species;
  private int         size;


  public Fish(int size, String species) {
    this.size = size;
    this.species = species;
  }


   public String toString() {
          return " A " + size + " cm " + species;
    }

  public String getSpecies() {
    return species;
  }

  public int getSize() {
    return size;
  }


}


Error: /Users/halahalhomoud/Fisher.java:57: incompatible types
found   : Fish[]
required: Fish
File: /Users/halahalhomoud/Fisher.java  [line: 58]
Error: /Users/halahalhomoud/Fisher.java:58: cannot find symbol

EDIT: show you how? I used it in the Pond class and it worked fine but I don't get why it's not working here.


回答1:


You want the fish that are caught by a Fisher. Now, you have that information in the array you can retrieve with getFishCaught.

Now look what you try to do instead:

 Fish f = new fish[i];
 System.out.println("A " + f.getSize() + " cm " + f.getFishCaught());

In the first line, you try to make a new array of fish, but it is, of course Fish (fish is the symbol that couldn't get resolved.). Then you try to assign the array reference to a single Fish f. But an array of Fish is not the same as a Fish. For example, you can eat a Fish, but not a Fish container, you know.

What you probably want is this:

 Fish f = (getFishCaught())[i];   // get the i-th Fish caught
 System.out.println("A " + f.getSize() + " cm " + f.getXXX());

where getXXX is a method of Fish that returns the Fishs species. (Since you didn't show the FIsh class, I can't know the exact name of this getter).




回答2:


Fish f = new fish[i];

should be:

Fish f = fishCaught[i];

Complete Method

  public void listFish(){
    System.out.println(name + " with " + numFishCaught + " as follows: ");
    for (int i = 0; i<numFishCaught; i++){
      if(fishCaught[i] != null){
          Fish f = fishCaught[i];
          System.out.println("A " + f.getSize() + " cm " + f.getSpecies());
      }
    }
  }


来源:https://stackoverflow.com/questions/21540604/java-method-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!