I need to write a function to College department :
Add function adds additional lecturer.
Action returns false if there is no place to add additional lecturer, and at the same true if the lecturer was successfully added.
What I had written so far:
public boolean newLecturer(Lecturer[] AllLecturer) {
int MaxLecturer = 0;
MaxLecturer = this.maxLecturer;
int sum = 0;
sum += 1;
if (sum < MaxLecturer) {
System.out.println("true");
return true;
}
else {
System.out.println("false");
return false;
}
}
The function does not work properly, It always returns true (because that the Max Lecturer always bigger than sum).
main:
public class main {
public static void main(String[]args){
Lecturer[] L1 = new Lecturer[]{new Lecturer("David",3,"Banana",1001)};
Lecturer[] L2 = new Lecturer[]{new Lecturer("Yossi",5,"apple",1002)};
Lecturer[] L3 = new Lecturer[]{new Lecturer("Y",2,"t",1003)};
College myCollege = new College("College1",20,L1,3);
//System.out.println(myCollege);
//myCollege.allLecturer=L2;
//System.out.println(myCollege);
myCollege.newLecturer(L1);
myCollege.newLecturer(L2);
myCollege.newLecturer(L3);
}
}
class College (Function here):
public class College {
public String name;
public int numOfLecturer;
public Lecturer[] allLecturer;
public int maxLecturer;
// constructor
public College(String Name, int NumOfLecturer, Lecturer[] AllLecturer,
int MaxLecturer) {
this.name = Name;
this.numOfLecturer = NumOfLecturer;
this.allLecturer = AllLecturer;
this.maxLecturer = MaxLecturer;
}
public College(String Name) {
this.name = Name;
}
public College(Lecturer[] AllLecturer) {
this.allLecturer = AllLecturer;
}
public boolean newLecturer(Lecturer[] AllLecturer) {
int MaxLecturer = 0;
MaxLecturer = this.maxLecturer;
int sum = 0;
sum += 1;
if (sum < MaxLecturer) {
System.out.println("true");
return true;
}
else {
System.out.println("false");
return false;
}
}
#Override
public String toString() {
String lecturers = "";
for (Lecturer lecturer : allLecturer) {
lecturers += lecturer;
}
return "[Name College: " + name + "] " + " [num Of Lecturer: "
+ numOfLecturer + "]" + " [all Lecturer: " + lecturers + "]"
+ " [max Lecturer " + maxLecturer + "]";
}
}
class Lecturer:
public class Lecturer {
public String name;
public int numOfTimesPenFalls;
public String favoriteIceCream;
public int autoNumber;
// constructor
public Lecturer(String Name, int NumOfTimesPenFalls,
String FavoriteIceCream, int AutoNumber) {
this.name = Name;
this.numOfTimesPenFalls = NumOfTimesPenFalls;
this.favoriteIceCream = FavoriteIceCream;
this.autoNumber = AutoNumber;
}
public Lecturer(String Name) {
this.name = Name;
}
#Override
public String toString() {
return "[name: " + name + "] " + " [num Of Times Pen Falls: "
+ numOfTimesPenFalls + "] " + " [favorite Ice Cream: "
+ favoriteIceCream + "] " + " [auto Number: " + autoNumber
+ "]";
}
}
And finally how can I print it?
Like this gives a compiler error:
myCollege.newLecturer("David",2,"Apple",1004);
thank you.
You're new; you need a lot of help.
Start by learning and following Java coding standards. Variable names should start with lower case. Classes start with upper. Deviations from that make your code hard to read.
Your method is wrong. You need something like this inside that class:
private static final int MAX_LECTURERS = 3;
private int numLecturers = 0;
private Lecturer [] lecturers = new Lecturer[MAX_LECTURERS];
public boolean addLecturer(Lecturer lecturer) {
boolean addedLecturer = false;
if (this.numLecturers < MAX_LECTURERS) {
this.lecturers[numLecturers++] = lecturer;
addedLecturer = true;
}
return addedLecturer;
}
Here's how you use this method:
Lecturer newLecturer = new Lecturer("foo", 1, "bar", 3);
college.addLecturer(newLecturer);
Please stop with all that array nonsense. The array is inside the College class.
The sum variable in your code is a local variable, its scope is only at the function level. This means the sum always get initialized to 0 and increased to 1 every time the function newLecturer() is called. That's why sum always smaller than MAX_LECTURER (1<3).
You need to use class variable numLecturers like in duffymo answer above.
Related
I'm trying to make a program that can tell whether or not a person needs to get a flu test based on their temperature and number of symptoms, but for some reason my toString() method refuses to work. I just need somebody to tell me why the toString() method refuses to work. The output of this code should be:
"Alice should be tested for the flu due to her 102 F temperature and aching muscles and fatigue."
when all I get as an output is:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 21, end 27, length 26
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3319)
at java.base/java.lang.String.substring(String.java:1874)
at FluDiagnoser.<init>(FluDiagnoser.java:20)
at Main.main(Main.java:5)
Main.java:
public class Main
{
public static void main(String[] args)
{
FluDiagnoser tester = new FluDiagnoser("Alice", 23, 102, "aching muscles and fatigue");
System.out.println(tester);
}
}
FluDiagnoser.java:
public class FluDiagnoser {
private int age;
private String name;
private double temp;
private String symptoms;
int x = 0;
int symptCount = 0;
int andFix = 5;
public FluDiagnoser(String name, int age, double temp, String symptoms) {
this.name = name;
this.age = age;
this.temp = temp;
this.symptoms = symptoms;
int symptL = symptoms.length();
for (int i = 0; i < symptL; i++) {
String commaStr = symptoms.substring(i, i + 2);
String andStr = symptoms.substring(i, i + andFix);
String cAndStr = symptoms.substring(i, i + 6);
if (commaStr.equals(", ") && !cAndStr.equals(", and ")) {
symptCount += 1;
} else if (andStr.equals(" and ")) {
symptCount += 2;
} else if (cAndStr.equals(", and ")) {
andFix = 2;
symptCount += 2;
} else {
symptCount = symptCount;
}
}
if (symptCount >= 2) {
x++;
} else {
x = x;
}
if (temp > 100.4) {
x++;
} else {
x = x;
}
}
public void changeSymptoms(String change) {
symptoms = change;
}
public String getSymptoms() {
return symptoms;
}
public String toString() {
if (x >= 2) {
return name + " should be tested for the flu due to their " + temp + " F tempurature and " + symptoms + ".";
} else {
return name + " doesn't need to be tested for the flu.";
}
}
}
I don't understand what's happening to make this program not work
I am struggling with an actually very easy task, which is print out items from an item array like:
arr[3,4,2,5]
0 items (0 kg)
0 items (1 kg)
0 items (2 kg)
and so on.
This is what I have done, but my program will not print anything :( Heeelp me please.
import java.util.ArrayList;
import java.util.Arrays;
public class Suitcase {
private ArrayList<Item> items = new ArrayList<>();
private final int maxWeight;
private int[] arr = new int[items.size()];
public Suitcase(int maxWeight) {
this.maxWeight = maxWeight;
}
public void addItem(Item item) {
int itemsWeight = 0;
for(Item i: items){
itemsWeight += i.getWeight();
}
if(itemsWeight + item.getWeight() <= this.maxWeight){
items.add(item);
}
}
public void array() {
for(Item item: items){
int index = item.getWeight();
this.arr[index] += 1;
}
}
public String toString() {
String returnValue = "";
for(int i = 0; i < arr.length; i++){
returnValue = arr[i] + " items " + i + " kg";
}
return returnValue;
}
}
public class Item {
private int weight;
private String name;
public Item(String name, int weight) {
this.name = name;
this.weight = weight;
}
public String getName() {
return this.name;
}
public int getWeight() {
return this.weight;
}
public String toString() {
return this.name + "(" + String.valueOf(this.weight) + ")";
}
}
Here is my main class, but it will not print anything:
public class Main {
public static void main(String[] args) {
Item book = new Item("Lord of the rings", 2);
Item phone = new Item("Nokia 3210", 1);
Item brick = new Item("brick", 4);
Suitcase suitcase = new Suitcase(5);
System.out.println(suitcase.toString());
suitcase.addItem(book);
System.out.println(suitcase);
suitcase.addItem(phone);
System.out.println(suitcase);
suitcase.addItem(brick);
System.out.println(suitcase);
}
}
Notes:
You do not need to call suitcase.toString() while printing the suitcase object. When System.out.println(suitcase); is implicitly gets converted into System.out.println(suitcase.toString());.
You can make your design simpler by having a variable to keep track of the total weight in the suitcase. Also, create a variable in Item to keep track of item's count in the suitcase.
You do not need int[] arr. It is simply adding unwanted complexity. Remove it.
It is better to use enhanced for loop if you can do so.
Given below is the code incorporating the points mentioned above:
import java.util.ArrayList;
class Suitcase {
private ArrayList<Item> items = new ArrayList<>();
private final int maxWeight;
private int totalWeight;
public Suitcase(int maxWeight) {
this.maxWeight = maxWeight;
}
public void addItem(Item item) {
if (totalWeight + item.getWeight() <= maxWeight) {
int index = items.indexOf(item);
if (index == -1) {// It means the item does not exist in the suitcase
items.add(item);
}
// If the item already exists, do not add it's entry again; just update its
// count and the totalWeight of the suitcase
totalWeight += item.getWeight();
item.setCount(item.getCount() + 1);
System.out.println(item.getName() + " was added in the suitcase");
} else {
System.out.println(item.getName() + " can not be accommodated in the suitcase.");
}
}
public String toString() {
String returnValue = "";
for (Item item : items) {
returnValue += "No. of " + item.getName() + " in the suitcase = " + item.getCount()
+ ", its total weight = " + item.getCount() * item.getWeight() + "kg\n";
}
if (returnValue.isEmpty()) {
returnValue = "The suitcase is empty.";
} else {
returnValue += "Total weight of the suitcase = " + totalWeight + "kg";
}
return returnValue;
}
}
class Item {
private int weight;
private String name;
private int count;
public Item(String name, int weight) {
this.name = name;
this.weight = weight;
}
public String getName() {
return this.name;
}
public int getWeight() {
return this.weight;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
#Override
public String toString() {
return "Item [weight=" + weight + ", name=" + name + ", count=" + count + "]";
}
}
public class Main {
public static void main(String[] args) {
Item book = new Item("Lord of the rings", 2);
Item phone = new Item("Nokia 3210", 1);
Item brick = new Item("brick", 4);
Suitcase suitcase = new Suitcase(5);
System.out.println(suitcase);
suitcase.addItem(book);
suitcase.addItem(phone);
suitcase.addItem(brick);
suitcase.addItem(phone);
suitcase.addItem(book);
System.out.println(suitcase);
}
}
Output:
The suitcase is empty.
Lord of the rings was added in the suitcase
Nokia 3210 was added in the suitcase
brick can not be accommodated in the suitcase.
Nokia 3210 was added in the suitcase
Lord of the rings can not be accommodated in the suitcase.
No. of Lord of the rings in the suitcase = 1, its total weight = 2kg
No. of Nokia 3210 in the suitcase = 2, its total weight = 2kg
Total weight of the suitcase = 4kg
Make sure to change your "toString()" function, currently it is only printing the last value, change it to:
public String toString(){
String returnValue ="";
for(int i = 0; i<arr.length;i++ ){
returnValue += arr[i] + " items " +i+" kg"; //notice its '+='
}
return returnValue;
}
You initialize your arr with value 0. Note that the initial size of new ArrayList() is 0. Take a look at this example:
import java.util.ArrayList;
class Main {
private static ArrayList<Object> items = new ArrayList();
private static int[] arr = new int[items.size()];
public static void main(String[] args) {
System.out.println(items.size()); # => 0
System.out.println(arr.length); # => 0
}
}
As a result when you call System.out.println(suitcase) the for loop in Suitcase's toString() method iterates over exactly 0 elements - therefore not outputting anything.
I try to determine the error since yesterday, but did not find him. All I know is where he must be placed approximately. But now to the topic.
For my app I have created a separate class with the name Player. Now if I make an ArrayList with this class, a newly added object overwrites all existing objects. So:
ArrayList empty -> Player is stored in ArrayList
ArrayList already contains a Player -> ArrayList now contains the newest Player instance two times
etc.
Here is my code corresponding to:
Player Object
public Player(String n, int m, int t) {
name = n;
money = m;
tip = t;
}
public String getName() {
return this.name;
}
public int getMoney() {
return this.money;
}
public int getTip() {
return this.tip;
}
public String toString() {
return this.name + "\n Tipp: " + this.tip + " | Einsatz: " + this.getMoney() + " ,- €";
}
Creating the ArrayList
public void addPlayertoEvent(String name, int money, int tip) {
Player p = new Player(name, money, tip);
playerList.add(p);
playerListString.add(p.toString());
lvPlayers.setAdapter(null);
ArrayAdapter<String> playerAdapter = new ArrayAdapter<String>(AddEventActivity.this, R.layout.list_items, playerListString);
lvPlayers.setVisibility(View.VISIBLE);
lvPlayers.setAdapter(playerAdapter);
etTip.setText("");
etName.setText("");
for(int i = 0; i < playerList.size(); ++i) {
Log.e("AL", "" + playerList.get(i).getName() + " " + playerList.get(i).getMoney() + " " + playerList.get(i).getTip());
}
}
Just started taking Java 2, and it has been over 6-7 months since I've taken Java 1 and done much programming at all, so please be kind if I did something dumb
The majority of the three classes below are for a previous assignment where you took a listing from the book and had to add a method called getMax() that returns the value of the highest key in the array, or -1 if the array is empty.
This part worked fine.
For the next part(the part I am having trouble with) we had to modify the assignment so that the item with the highest key is not only returned by the method, but also removed from the array.
To do this I tried:
public long removeMax(PrintWriter pw)
{
long maxIndex;
maxIndex = getMax();
delete(maxIndex);
return maxIndex;
}
But the maxIndex = getMax(); and delete(maxIndex); are giving me errors and I'm not quite sure why. Although I'm convinced I'm just making a small mistake due to being rusty at programming.
The error it is giving me is actual and formal argument lists differ in length. I tried changing and switching things around but no matter what I did nothing seemed to work.
Below are the Employee, HighArrayObject and Project21Rev(class where getMax and removeMax are) classes in full.
public class Employee
{
protected int empNo; // employee number
protected String ssno; // social security number
protected String lastName; // Last name
protected String firstName; // First name
//This constructor initializes the variables
public Employee(int eNo, String ssn, String lName, String fName)
// aliases are used in the function header
{
empNo = eNo; // the alias is assigned to the actual value
ssno = ssn;
lastName = lName;
firstName = fName;
}
// Make a no argument constructor as well
public Employee()
{
empNo = 0;
ssno = "";
lastName = "";
firstName = "";
}
/**
The copy constructor initializes the object
as a copy of another Employee object
#param object2 The object to copy
*/
public Employee(Employee object2)
{
empNo = object2.empNo;
ssno = object2.ssno;
lastName = object2.lastName;
firstName = object2.firstName;
}
// The set method sets a value for each field
public void set(int eNo, String ssn, String lName, String fName)
// aliases are used in the function header
{
empNo = eNo; // the alias is assigned to the actual value
ssno = ssn;
lastName = lName;
firstName = fName;
}
// the getKey method returns the employee number
public int getKey()
{ return empNo; }
// the setKey method sets the employee number
public void setKey(int id)
{ empNo = id; }
// toString method
// returns a string containing the instructor information
public String toString()
{
// Create a string representing the object.
String str = "Employee Number: " + empNo +
"\nSocial Security Number: " + ssno +
"\nLast Name: " + lastName +
"\nFirst Name: " + firstName;
// Return the string;
return str;
}
}
Start of next class
import java.io.*;
class HighArrayObject
{
protected Employee[] emp;
protected int nElems;
public HighArrayObject(int max) // constructor
{
emp = new Employee[max];
nElems = 0;
}
// The createEmployees method creates an Employee object
// for each element of the array
public static void createEmployees(Employee[] emp, int maxsize)
{
int empNo;
String ssno;
String lastName;
String firstName;
// Create the employees
for(int index = 0; index < emp.length; index++)
{
// Get the employee data
emp[index] = new Employee();
}
}
public boolean find(long searchKey, PrintWriter pw)
{
System.out.println("Trying to find item with employee number " + searchKey);
pw.println("Trying to find item with employee number " + searchKey);
int j;
for(j=0; j<nElems; j++)
if(emp[j].empNo == searchKey) // == ok since empNo is a primative
break; // exit loop before end
if(j == nElems) // gone to end?
return false;
else
return true; // no, found it
} // end find()
public void insert(int eNo, String sNo, String lName, String fName, PrintWriter pw)
{
System.out.println("Inserting employee with employee number " + eNo);
pw.println("Inserting employee with employee number " + eNo);
Employee temp = new Employee();
temp.empNo = eNo;
temp.ssno = sNo;
temp.lastName = lName;
temp.firstName = fName;
emp[nElems] = temp;
nElems++;
}
public boolean delete(long value, PrintWriter pw)
{
System.out.println("Deleting employee number " + value);
pw.println("Deleting employee number " + value);
int j;
for(j=0; j < nElems; j++) // look for it
if(value == emp[j].empNo)
break; // can't find it
if(j==nElems)
return false;
else // found it
{
for(int k=j; k<nElems; k++) // move higher ones down
{
emp[k]=emp[k+1];
}
nElems--; // decrement size
return true;
}
} // end delete
public void display(PrintWriter pw)
{
System.out.println("The array of employees is: ");
pw.println("The array of employees is: ");
for(int j=0; j<nElems; j++)
{
System.out.println(emp[j].empNo + " " + emp[j].ssno + " "
+ emp[j].lastName + " " + emp[j].firstName);
pw.println(emp[j].empNo + " " + emp[j].ssno + " "
+ emp[j].lastName + " " + emp[j].firstName);
} // end for
} // end delete
} // end HighArrayObject
Start of next class
import java.io.*;
public class Project21Rev extends HighArrayObject //reference Gaddis p.658
{
public Project21Rev(int max) // subclass constructor
{
super(max); // call superclass constructor
}
public void getMax(PrintWriter pw) // new functionality as required by the assignment
{
int maxIndex = -1; // not found yet
if(nElems == 0)
System.out.println("Number of elements is 0");
else
{
int max = emp[0].empNo; // assume the first value is the largest
maxIndex = 0;
for (int i = 1; i < nElems; i++) //now check the rest of the values for largest
{
if(emp[i].empNo > max)
{
maxIndex = i;
}
}
System.out.println("The largest value is " + emp[maxIndex].empNo + " " + emp[maxIndex].ssno + " " + emp[maxIndex].lastName + " " + emp[maxIndex].firstName);
pw.println("The largest value is " + emp[maxIndex].empNo + " " + emp[maxIndex].ssno + " " + emp[maxIndex].lastName + " " + emp[maxIndex].firstName);
System.out.println("at location " + maxIndex);
pw.println("at location " + maxIndex);
}
}
public long removeMax(PrintWriter pw)
{
long maxIndex;
maxIndex = getMax();
delete(maxIndex);
return maxIndex;
}
// modified find method follows
public void find( int searchKey, PrintWriter pw)
{
System.out.println("Trying to find item with employee number " + searchKey);
pw.println("Trying to find item with employee number " + searchKey);
int j;
Boolean found = false;
for(j=0; j < nElems; j++)
if(emp[j].empNo == searchKey)
{
found = true;
System.out.println("Found " + emp[j].empNo + " " + emp[j].ssno + " " + emp[j].lastName + " " + emp[j].firstName);
pw.println("Found " + emp[j].empNo + " " + emp[j].ssno + " " + emp[j].lastName + " " + emp[j].firstName);
System.out.println("at location " + j);
pw.println("at location " + j);
}
if(found == false)
{
System.out.println(searchKey + " Not found");
pw.println(searchKey + " Not found");
}
}
}
class Project21RevApp
{
public static void main(String[] args) throws IOException
{
// set up printer output file
PrintWriter pw = new PrintWriter(new BufferedWriter
(new FileWriter("output21.dat")));
int maxSize = 100; // array size
Project21Rev arr; // reference to array
arr = new Project21Rev(maxSize); // create the array
arr.insert(77,"A","B","C",pw);
arr.insert(99,"D","E","F",pw);
arr.insert(44,"G","H","I",pw);
arr.insert(55,"J","K","L",pw);
arr.insert(22,"M","N","O",pw);
arr.insert(88,"P","Q","R",pw);
arr.insert(11,"S","T","U",pw);
arr.insert(00,"V","W","X",pw);
arr.insert(66,"Y","Z","AA",pw);
arr.insert(33,"BB","CC","DD",pw);
arr.display(pw); // display items
int searchKey = 35; // search for item
arr.find(searchKey, pw);
searchKey = 22; // search for item
arr.find(searchKey, pw);
arr.delete(00, pw); // delete 3 items
arr.delete(55, pw);
arr.delete(99, pw);
arr.display(pw); // display items again
// new functionality follows
arr.getMax(pw);
pw.close();
} // end main()
} // end class Project21RevApp
Well, the error message actually tells you exactly what's wrong.
Your method delete() accepts two parameters:
public boolean delete(long value, PrintWriter pw) {
// ...
}
You are trying to call it with only one:
delete(maxIndex);
To fix the error, pass the right amount and types of parameters.
Hymm there are too many wrong things. Start by learning what a Method is and how you call it. You are trying to call your method
public void getMax(PrintWriter pw){..}
with
maxIndex = getMax();
Now you see when you deffined that method you told it with VOID that it should return nothing. But it requires a PrintWriter Object. You had the right idea when you created your:
public long removeMax(PrintWriter pw)
you see that method should receive such variable/object and it will be "pw".
So the right way to call your method would be
getMax(pw);
and if you want it to return something you really should just read a bit more about java and the way methods work.
The other big problem is that you are talking about a LIST (abstract data type) but in the code I see
protected Employee[] emp;
Witch is not at all a list but just a simple Array. There is a big difference. If the requirements are that you have an actual java/programming list, then there is no such thing in the Program. It's just an Array that looks like a general list of things, but that is called an Array in most programming languages. Perhaps your teacher makes no difference.
This is not a complete solution but there are too many things to fix and the code is too big for whatever it's suppose to do. Don't get stressed, just continue to read about Java from whatever source you got. Keep in mind you are working with Arrays not a lists in that code and you need to learn some basic information about the language.
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.
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).
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());
}
}
}