返回boolean /从数组中删除该元素的类[JAVA]

时间:2017-01-20 22:25:08

标签: java arrays

对于一个班级项目,我应该制作一个四年级的成绩簿:Main(只运行成绩册),成绩簿(包括我将使用的所有方法,如添加学生,删除学生,添加作业等),学生(将保留学生的姓名,号码,电子邮件)和作业(包含所有作业详细信息)。我的导师编写了大部分代码设计,他让我们编写辅助方法,找到特定的学生和作业并返回一个布尔值。我需要这些辅助方法,但我不知道如何编写它以便我可以使用他们找到的学生或作业(即如何在帮助方法找到学生之后移除学生?)。我的所有学生和作业都在不同的阵列中(不是数组列表或其他任何内容,按照他的指示)如果还有其他方式而没有返回类型作为布尔值,我想我能够改变回报类型也是如此。

这是我的助手方法:

   private boolean findStd (String stdName)
   {
       boolean thing = false;

       for(int i = 0; i < students.length; i++)
       {
           if(stdName.equalsIgnoreCase(students[i].studentName))
           {
               thing = true;
           }
       }

       return thing;
   }        

现在是我的removeStudent方法:

 private boolean removeStudent()
   {
       String name = JOptionPane.showInputDialog("What's the student's name (last, first)?");
       findStd(name);

       return false;
   }             // delete student from list 

3 个答案:

答案 0 :(得分:0)

假设学生名称存储为“last,first”,那么您只需要遍历数组,并在找到正确的学生后删除它:

for (int i = 0; i < students.length; i++) {
    if (students[i].studentName.equalsIgnoreCase(name)) {
        // delete student, e.g. students[i] = null;
    }
}

其中name是JOptionPane的结果。

答案 1 :(得分:0)

你找到和删除的逻辑似乎已经消失了。为了从一个阵列中移除一个学生你想要做几件事

  1. 我确定我要删除的那个人的姓名是否存在。
  2. 如果它在我的数组中确实存在,那么我将通过告诉它使用什么名称或索引来删除该学生。 (这是您使用show input对话框的地方)
  3. 试试这个:

    //Change the method for find to return the index, but returns -1
    // if the name isn't found which can be used to let a caller of 
    // the function know that it does not exist as I will show in the removeStudent()
    private int findStd (String stdName)
    {
        int indexOfStudent = -1;
    
        for(int i = 0; i < students.length; i++)
        {
            if(stdName.equalsIgnoreCase(students[i].studentName))
            {
               indexOfStudent = i;
               break;
            }
        }
       //now we will either return a valid index or -1
       return indexOfStudent;
    }
    
    private boolean removeStudent()
    {
        String name = JOptionPane.showInputDialog("What's the student's name (last, first)?");
        //if the name exists then our findStd() will give us the index
        int indexToRemove = findStd(name);
        if(indexToRemove != -1)
        {
            students[indexToRemove] = null;
            return true;
        }
        return false;
    }
    

答案 2 :(得分:0)

有多种方法可以从数组中“删除”元素。这取决于“删除”的含义。

  1. 您可以将null指定给要删除的元素位置的数组。

    问题:您现在在数组中有null个值,其余代码必须处理它。

  2. 您可以使用循环(或实用程序方法)复制剩余的元素以填充已删除元素留下的“洞”。

    问题:现在您在右端有一个“洞”(即空值)。您的代码需要处理您的概念数组小于实际数组长度的事实; e.g。

    for(int i = 0; i < students.length /** <<== wrong */ ; i++)
    
  3. 您可以创建一个具有正确大小的新数组,并将元素复制到它...使用一个或两个循环,或调用实用程序方法。

    问题:您现在需要更新您对原始数组有引用的所有地方。

  4. 您可以使用List而不是数组。 List API提供了删除元素的操作。

    问题:您可能无法更改students的声明。

  5. 在上面的描述中应该有足够的信息来告诉你代码需要做什么......在每种情况下。