简体   繁体   English

从数组中删除项目

[英]Removing items from an array

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 刚开始学习Java 2,自从我学习Java 1并完成了很多编程工作已经过去6到7个月了,所以如果我做些愚蠢的事情,请保持警惕

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. 下面的三个类中的大多数用于上一个作业,在该作业中您从书中获得了一个清单,并且必须添加一个名为getMax()的方法,该方法返回数组中最高键的值;如果数组为空,则返回-1。 。

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(); 但是maxIndex = getMax(); and delete(maxIndex); 和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. 以下是完整的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;
}
}

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: 您的方法delete()接受两个参数:

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. 现在,您看到在定义该方法时,用VOID告诉它应该什么也不返回。 But it requires a PrintWriter Object. 但是它需要一个PrintWriter对象。 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". 您会看到该方法应接收此类变量/对象,并且将为“ 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. 如果您希望它返回某些内容,那么您实际上应该阅读更多有关Java和方法工作方式的内容。

The other big problem is that you are talking about a LIST (abstract data type) but in the code I see 另一个大问题是您正在谈论LIST(抽象数据类型),但是在代码中

protected Employee[] emp;

Witch is not at all a list but just a simple Array . Witch根本不是列表,而只是一个简单的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. 如果要求您具有实际的Java /编程列表,则程序中没有此类内容。 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. 不要紧张,只要继续从任何来源获得有关Java的知识。 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. 请记住,您正在使用数组而不是该代码中的列表,并且需要学习有关该语言的一些基本信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM