我的DeleteByName方法有错误。 错误是:
StudentStore 类型中的方法 delete(Student) 不适用于参数 (String)
我知道这与方法本身的参数错误有关,但我不知道如何解决它。 然后我无法让学生之后从文本文件中删除。该存储是使用 Arraylist 创建的。 有五个学生被声明,我有添加方法工作。
这是我的代码:
主应用
//---------------------------------------------------------------------------------------
// Name: Case 3: Delete by Name.
// Description: Choice 3 gives the user an option to delete an employee by name.
//---------------------------------------------------------------------------------------
case 3:
System.out.println("Delete by Name.");
Student studentDelete = MenuMethods.userInputByName();
details.searchByName(studentDelete.getStudentName());
details.deleteByName(studentDelete.getStudentName());
break;
学生商店
// ---------------------------------------------------------------------------------------
// Name: DeleteByName.
// ---------------------------------------------------------------------------------------
public boolean deleteByName(Student s)
{
if(students.remove(s))
return students.remove(s);
else
return false;
}
public Student searchByName(String employeeName)
{
Student employee = Student.get(employeeName);
System.out.println(employee);
return employee;
}
// ---------------------------------------------------------------------------------------
// Name: Search by Email.
// ---------------------------------------------------------------------------------------
public String searchByEmail(String studentEmail)
{
for (Student student : map.values())
{
if (student.getStudentEmail().equals(studentEmail)
{
System.out.println(student.getStudentEmail());
return student.getStudentEmail();
}
}
return null;
}
菜单方法
//---------------------------------------------------------------------------------------
// Name: Imports.
// Description: To allow the use of different Java classes.
//---------------------------------------------------------------------------------------
import java.util.Scanner;
//---------------------------------------------------------------------------------------
public class MenuMethods
{
private static Scanner keyboard = new Scanner(System.in);
//---------------------------------------------------------------------------------------
// Methods for the Company Application menu.
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
// Name: getMenuChoice.
// Description: Method for validating the choice.
//---------------------------------------------------------------------------------------
public static int getMenuChoice(String menuString, int limit,String prompt, String errorMessage)
{
System.out.println(menuString);
int choice = inputAndValidateInt(1, limit, prompt, errorMessage);
return choice;
}
//---------------------------------------------------------------------------------------
// Name: inputAndValidateInt.
// Description: This method is used in the getMenuChoice method.
//---------------------------------------------------------------------------------------
public static int inputAndValidateInt(int min, int max, String prompt,String errorMessage)
{
int number;
boolean valid;
do
{
System.out.print(prompt);
number = keyboard.nextInt();
valid = number <= max && number >= min;
if (!valid)
{
System.out.println(errorMessage);
}
} while (!valid);
return number;
}
//---------------------------------------------------------------------------------------
// Name: userInput
// Description: This method is used in the MainApp to give the user capability to enter
// the details when adding details of an employee into the store.
//---------------------------------------------------------------------------------------
public static Student userInput()
{
String temp = keyboard.nextLine();
Student s = null;
System.out.println("Please enter the Student Name:");
String studentName = keyboard.nextLine();
System.out.println("Please enter the Student ID:");
String studentId = keyboard.nextLine();
System.out.println("Please enter the Student E-mail address:");
String studentEmail = keyboard.nextLine();
System.out.println("Please enter the Student telephone number:");
String studentTelephoneNumber = keyboard.nextLine();
return s = new Student(studentName, studentId, studentEmail,studentTelephoneNumber);
}
//---------------------------------------------------------------------------------------
// Name: userInputByName.
// Description: This method is used in the MainApp to give the user capability to search by name.
//---------------------------------------------------------------------------------------
public static Student userInputByName()
{
// String temp is for some reason needed. If it is not included
// The code will not execute properly.
String temp = keyboard.nextLine();
Student s = null;
System.out.println("Please enter the Student Name:");
String studentName = keyboard.nextLine();
return s = new Student(studentName);
}
//---------------------------------------------------------------------------------------
// Name: userInputByEmail
// Description: This method is used in the MainApp to give the user capability to search by email.
//---------------------------------------------------------------------------------------
public static String userInputByEmail()
{
// String temp is for some reason needed. If it is not included
// The code will not execute properly.
String temp = keyboard.nextLine();
Student s = null;
System.out.println("Please enter the StudentEmail:");
String studentEmail = keyboard.nextLine();
// This can use the employeeName's constructor because java accepts the
// parameters instead
// of the name's.
return studentEmail;
}
//---------------------------------------------------------------------------------------
}
使用错误的参数(字符串)调用 deleteByName 方法
details.deleteByName(studentDelete.getStudentName());
但它期望学生
public boolean deleteByName(Student s)
您应该将其更改为:
public boolean deleteByName(String name){
您的第二个问题是删除过程本身。您必须删除一个对象:
public boolean deleteByName(String name){
Student s = new Student(name);
return students.remove(s);
}
若要从列表中删除对象,需要在 Student 类中使用 equals-方法。如果没有该方法,remove 将无法找到要删除的正确对象(将 name 替换为学生班级中的正确属性名称!
public boolean equals(Object b){
if(this.name.equals(b.name)){
return true;
}
return false;
}
details.deleteByName(studentDelete.getStudentName());
在上面的行中,您的传递字符串类型。
更改删除方法
public boolean deleteByName(String s)
{
if(students.remove(s))
return students.remove(s);
else
return false;
}
// ---------------------------------------------------------------------------------------
// Name: Remove.
// ---------------------------------------------------------------------------------------
public void delete(String s)
{
students.remove(s);
}
然后在主应用程序中
case 3:
System.out.println("Delete by Name.");
Student studentDelete = MenuMethods.userInputByName();
details.searchByName(studentDelete.getStudentName());
details.delete(studentDelete.getStudentName());
break;
你没有确切地提到你得到什么错误。
代码存在许多问题:
-
方法的签名是
deleteByName(Student s)
,但你按如下方式调用它:deleteByName(studentDelete.getStudentName())
其实际参数似乎是字符串。问题出在 deleteByName 方法的声明上。给定它的名称,您应该将其声明为期望名称作为参数(很可能是字符串):public boolean deleteByName(String name);
-
删除相同的名称 2 次:
if(students.remove(s)) return students.remove(s); else return false;
试试这个:
return students.remove(s) != null;