我试图在类中编写一个方法,提示用户输入学生的姓名。然后搜索已存在的名称列表以进行匹配。但我似乎无法弄清楚如何继续编码如何搜索有效的匹配。
public void modifyExam(String [] names)
{
String name;
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter the name of the student whose grade you would like to modify: ");
name = scanner.nextLine();
boolean nameMatch = true;
for (int i=0; i<names.length; i++)
{
// ....
}
答案 0 :(得分:2)
您应该使用 .equals()来比较Java中的字符串。例如:
public void modifyExam(String [] names) {
String name;
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter the name of the student whose grade you would like to modify: ");
name = scanner.nextLine();
boolean nameMatch = false;
for (int i=0; i<names.length; i++) {
if( names[i].equals(name) ) {
// do your logic here ...
}
}
}
答案 1 :(得分:1)
我建议您将学生存储在Map
中,并以名称为键。那么你就不必迭代(假设你的名字是唯一的)。
Map<String, Student> students = new HashMap<String, Student>();
Student s = new Student("Joe Smoe");
students.put(s.getName(), s);
然后你可以查找学生更新如下:
Student studentToUpdate = students.get(name);
if (studentToUpdate != null) {
// logic here...
}
注意如果此地图不包含该键的映射,则返回null。因此,您需要在使用get调用的返回值之前添加null检查并相应地处理它。
答案 2 :(得分:0)
等式。
if(name.equals(name[i]))
System.out.println("match at " i);
答案 3 :(得分:0)
boolean nameMatch = false;
for (int i=0; i<names.length; i++) {
if(names[i].equals(name)) {
namesMatch = true;
break;
}
}
中断意味着您不会在找到匹配项的情况下继续搜索数组。
答案 4 :(得分:0)
我会将此功能分解为两个功能。一个名为findName()或更通用的findString(),另一个名为modifyExam。让findString()返回一个索引,在修改考试中使用索引 这是findString()应该做的事情
int findString(String [] names, String name) {
for ( int i = 0; i < names.length; i++ ) {
if names[i].equals(name) return // either a boolean or an index or something.
}
return -1 // or null
}
如果搜索数组很大且已经排序,您也可以使用二进制搜索。使用binarySearch(),findString方法将类似于: -
int findString(String[] names, String name, int startIndex, int stopIndex) {
if ( startIndex > stopIndex) return;
int mid = (stopIndex - startIndex)/2
if ( name < names[mid] ) return findString(names, name, startIndex, mid-1);
else if ( names[mid].equals(name) ) return mid;
else return findString(names, name, mid+1, stopIndex);
}