刚刚开始学习Java 2,自从我学习Java 1并完成大量编程以来已经有6到7个月的时间了,所以如果我做了一些愚蠢的话,请好心。
下面三个类中的大部分用于之前的作业,其中您从书中获取了一个列表,并且必须添加一个名为getMax()的方法,该方法返回数组中最高键的值,如果是数组是空的。
这部分工作正常。
对于下一部分(我遇到问题的部分),我们必须修改赋值,以便具有最高键的项不仅由方法返回,而且还从数组中删除。
要做到这一点,我试过:
public long removeMax(PrintWriter pw)
{
long maxIndex;
maxIndex = getMax();
delete(maxIndex);
return maxIndex;
}
但是maxIndex = getMax();并删除(maxIndex);给我错误,我不太清楚为什么。虽然我确信我只是因为编程生锈而犯了一个小错误。
它给我的错误是实际和正式的参数列表长度不同。我尝试改变和改变事物,但无论我做什么似乎都没有用。
下面是Employee,HighArrayObject和Project21Rev(getMax和removeMax所在的类)。
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;
}
}
下一堂课的开始
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
下一堂课的开始
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
答案 0 :(得分:0)
好吧,错误信息实际上告诉你确切的错误。
您的方法delete()
接受两个参数:
public boolean delete(long value, PrintWriter pw) {
// ...
}
你试图只用一个叫它:
delete(maxIndex);
要修复错误,请传递正确数量和类型的参数。
答案 1 :(得分:0)
public void getMax(PrintWriter pw){..}
与
maxIndex = getMax();
现在你看到你在deffined那个方法时用VOID告诉它它应该什么也不返回。但它需要一个PrintWriter对象。创建你的时候,你有正确的想法:
public long removeMax(PrintWriter pw)
你看到该方法应该接收这样的变量/对象,它将是&#34; pw&#34;。 因此,调用方法的正确方法是
getMax(pw);
如果你想要它返回一些东西你真的应该阅读更多关于java和methods的工作方式。
另一个大问题是你在谈论LIST (abstract data type),但在我看到的代码中
protected Employee[] emp;
女巫根本不是list,只是一个简单的Array。有一个很大的不同。如果要求是你有一个实际的java /编程列表,那么程序中没有这样的东西。它只是一个看起来像一般事物列表的数组,但在大多数编程语言中称为数组。也许你的老师没有任何区别。
这不是一个完整的解决方案,但有太多东西需要修复,而且代码太大,无论它想做什么。不要感到压力,只要继续从任何来源阅读Java。请记住,您正在使用数组而不是该代码中的列表,您需要了解有关该语言的一些基本信息。