从阵列中删除项目

时间:2015-05-31 22:46:52

标签: java arrays methods

刚刚开始学习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

2 个答案:

答案 0 :(得分:0)

好吧,错误信息实际上告诉你确切的错误。

您的方法delete()接受两个参数:

public boolean delete(long value, PrintWriter pw) {
    // ...
}

你试图只用一个叫它:

delete(maxIndex);

要修复错误,请传递正确数量和类型的参数。

答案 1 :(得分:0)

海姆有太多错误的东西。首先要了解Method是什么以及如何称呼它。您正试图调用您的方法

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。请记住,您正在使用数组而不是该代码中的列表,您需要了解有关该语言的一些基本信息。