如何通过控制台菜单(Java)使用用户输入搜索数组

时间:2015-04-10 16:21:54

标签: java arrays

我正在开发一个程序,允许用户使用控制台菜单将各种内容输入到数组中。

  1. 将班级学生的实例输入到我已完成并正常工作的数组中。

  2. 创建我已经完成的课程详情实例。

  3. 在数组中搜索特定学生的详细信息。如果存在具有此名称的学生,它将打印存储在数组中的所有详细信息,如果不存在,则会抛出类似"学生不在课程"。

  4. 我只是假设学生名字是唯一的,因为我只需要存储20个。到目前为止,我创建了这种方法似乎并没有起作用。我想我需要使用for循环而不是binarySearch,但我不太清楚如何做到这一点,因为没有视频或帖子似乎显示如何使用此循环{{1} 1}}和String

    这是迄今为止的方法:

    Scanner

    对此有任何帮助将不胜感激,你会非常喜欢帮助一个卑微的菜鸟:)

2 个答案:

答案 0 :(得分:1)

如果您更喜欢进行顺序搜索,可以像这样使用for循环:

private void Search(){
   // Create a scanner for input, and get the name for search
   Scanner inputScanner = new Scanner(System.in);
   System.out.println("Type student name for search:");
   String studentName = inputScanner.nextLine();

   // use for loop to search array.
   for(int i = 0; i < studentArray.length; i++){
      if(studentArray[i].getName().equals(studentName)){
         // If student was found, print his details and return from this function.
         System.out.println(studentArray[i]);
         return;
      }
   }

   // If we reach this point, it means the student was never found in the for loop.
   System.out.println("Student not found.");
}

有几点需要注意:

  • 在您的问题中,您要将学生对象与字符串进行比较。单独类型的差异足以使二进制搜索返回false,因此您永远不会得到匹配。
  • 在我的循环中,我假设数组包含Student个对象,所以我在student对象上调用getName()来比较两个字符串,所以如果存在匹配,我将得到匹配。
  • 打印学生对象本身不仅会打印值,如果还没有,则需要覆盖toString()

答案 1 :(得分:0)

首先不要做SuppressWarnings。当你开始学习从糟糕的做法开始时,这是一种不好的做法并且不好。

我会使用binarySearch代替你的情况,只需在列表中使用contains方法,如下所示:

     List <String> list = new ArrayList();  
     list.add("one"); 
     list.add("two"); 

     if (list.contains("two")) {
         System.out.println("true");
     }

此外无需对数组进行排序:)。