Создание метода remove () для удаления элемента из массива (Java) - PullRequest
1 голос
/ 01 марта 2011

У меня есть 2 класса Студенческий класс и Студенческий класс.В моем классе Student я должен написать метод remove (int ID), чтобы удалить студента с определенным идентификатором из массива.Метод вызывается методом main () в классе StudentTest.код выглядит так:

public class Student {
     private final int size = 12;  //max. size
     private int [] ID = new int [size];   //the student's id number
     private String [] name = new String [size];  //the student's name
     private double [] tuition = new double [size];

     int position= 0;  //position to add data

//an add() method goes here, but is not the case of my question so I'm emitting it

 //Here is the remove() to remove a student given their ID number
 public void remove(int ID){
 for(int i=0; i<size ; i++)
    if (ID[i].equals(ID)
 {
   remove(i);
   return true;
  }
  return false;
  }//remove() :this method is so wrong I know, but I've been trying so many different  things and its just driving me nutts!

 //a method goes here to display student info.
  } //end Student class

  //below is my StudentTest class which will be calling the remove() method

  public class StudentTest extends Student {
      //main
      public static void main(String args[]){

        Student stuList = new Student();

         stuList.add(1234, "Jane Jane", 23000);
         stuList.add(4321, "Billy Bill", 15500);
         //2 students are added to the list: in this order; (ID, "Name", Tuition)

         //now this main program calls remove(), to remove a student by ID
         stuList.remove(1234);

        //rest of code entails displaying the new list and so on

        }//main()
       }// StudentTest class

Сейчас.Мой метод удаления остро нуждается в помощи.Я изучил класс ArrayList и его методы.но простое написание stuList.remove () не работает вообще.Я также попробовал метод итератора (я заблудился на этом).Пожалуйста, направьте меня в правильном направлении .. спасибо!

Ответы [ 4 ]

5 голосов
/ 01 марта 2011

Я бы отказался от решения неотложной проблемы, вернулся бы к дизайну и получил бы правильное ООП, начиная с

1) Учащийся, должен ли он представлять собой коллекцию или представлять одного учащегося.

Является ли задание во вводном курсе программирования?

1 голос
/ 01 марта 2011

Я не понимаю, почему у вас должны быть идентификаторы StudentID, Name и Tuition в качестве массивов, класс учеников должен определять «Student», а не нескольких учеников.

1 класс - студент

Student
{
   int ID;
   string Name;
   double Tution;
}

Класс 2 - StudentManager

StudentManager
{
   Student ListOfStudents;

   AddStudent();
   RemoveStudent();
}

EDIT:

Студенческий класс представляет одного студента, а функции этого студента, такие как Имя и Обучение, StudentManager используются для взаимодействия с объектами Студентов, добавления и удаления их из списков и т. Д., В отличие от наличия трех массивов, содержащих один фрагмент информация для студентов и попытки обновить их все, это плохой дизайн, и полезно учиться избегать такого рода вещей на раннем этапе.

Когда я изучал ООП еще до того, как начал программировать, я использовал для идентификации возможных объектов, которые можно было бы преобразовать в классы, обнаружил, какими свойствами они могут обладать и как они будут взаимодействовать с другими объектами.

Вы увидите, что никто не опубликует решение вашей проблемы здесь, так как это домашняя работа, но мы можем попытаться помочь вам понять, как вы можете решить вашу проблему.

0 голосов
/ 01 марта 2011

У вас есть 3 массива и int position для хранения позиции для добавления данных. Если вы удалите одного студента, вы должны:

1) найти свою позицию в массиве, скажем, r - это позиция для удаления (может быть между 0 и position-1)

2) уменьшите позицию (position = position - 1), потому что теперь ваш список будет короче.

3) замените для всех 3 массивов элемент с позицией r на элемент, расположенный в позиции r+1, теперь вы потеряли элемент в позиции r и у вас вдвое больше элемента, который расположен в r+1.

4) заменить r+1 на r+2 и так далее, пока вы не замените position-1 на position (новое значение позиции)

Если у вас возникли проблемы с реализацией, покажите нам код и снова обратитесь за помощью ...

РЕДАКТИРОВАТЬ: чтобы ответить на ваши комментарии:

У вас есть 7 элементов, пронумерованных от 0 до 6, позиция 7, так как это место, где нужно вставить следующее значение, вы хотите удалить одно с номером 4 (r = 4). Вот более простое решение, но оно изменит порядок списка:

position = position - 1; // now position is 6
array[r] = array[position]; // now element at position 4 was replaced with the one at the end of the array, which is still there by the way. Do this for all the 3 arrays...

Вот и все ...

0 голосов
/ 01 марта 2011

Проблема в вашем коде в том, что ваш метод remove () рекурсивно вызывает себя бесконечно, чтобы умереть с StackOverflow

public void remove(int ID){
 boolean found = false;
 int i = 0;
 for(i=0; i<size ; i++)
    if (ID[i].equals(ID)
 {
   found = true;
   break;

 }
 if (found) {
    // remove the item and push all subsequent items to save space.
    while (i < size - 1; i++) {
       ID[i] = ID[i + 1];
    }
 }
 return found;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...