Java数组匹配输入与数组

时间:2014-04-20 20:31:19

标签: java arrays

我试图在类中编写一个方法,提示用户输入学生的姓名。然后搜索已存在的名称列表以进行匹配。但我似乎无法弄清楚如何继续编码如何搜索有效的匹配。

 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++) 
      {
       // ....
      }

5 个答案:

答案 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);
}