【问题标题】:Testing string and integer arrays against user input针对用户输入测试字符串和整数数组
【发布时间】:2014-05-09 00:57:12
【问题描述】:

我已经为我想在我的程序中使用的字符串和整数创建了数组,我想使用它们而不是使用

(name.equals "barry"||"matty"

例如。

我想知道如何编写 if 语句来根据数组中的字符串检查用户输入。

import java.util.Scanner;

public class Username
{
    public static void main (String[]args)
    {
        Scanner kb = new Scanner (System.in);
        // array containing usernames 
        String [] name = {"barry", "matty", "olly","joey"}; 

        System.out.println("Enter your name");
        name = kb.nextLine();
        if (name.equals("barry ")|| name.equals("matty" ) || name.equals("olly")||name.equals("joey"))
            System.out.println("you are verified you may use the lift");

        Scanner f = new Scanner(System.in);
        int floor;

        int [] floor = {0,1,2,3,4,5,6,7};

        System.out.println("What floor do you want to go to ");
        floor = f.nextInt();

        if (floor >7)
            System.out.println("Invalid entry");
        else if (floor <= 7)
            System.out.println("Entry valid");
    }
}

【问题讨论】:

    标签: java arrays if-statement user-input


    【解决方案1】:

    认为您只是在寻找List.contains - 但这当然需要List 而不是数组。这里有两个明显的选择。

    首先,您可以使用List&lt;String&gt; 开头:

    List<String> names = new ArrayList<>();
    names.add("barry");
    names.add("matty");
    names.add("olly");
    names.add("joey");
    ...
    if (names.contains(name))
    {
        ...
    }
    

    或者,您可以使用Arrays.asList 创建视图:

    String[] names = {"barry", "matty", "olly", "joey"}; 
    List<String> namesList = Arrays.asList(names);
    ...
    if (namesList.contains(name))
    {
    }
    

    作为第三种选择,如果您将名称数组排序(手动或调用Arrays.sort),您可以使用Arrays.binarySearch 尝试查找用户输入的名称:

    String[] names = {"barry", "matty", "olly", "joey"}; 
    Arrays.sort(names);
    ...
    if (Arrays.binarySearch(names, name) >= 0)
    {
        ...
    }
    

    【讨论】:

      【解决方案2】:

      数组是非常低级的结构,不提供任何方法。你最好改用集合,它有一个contains() 方法:

      Set<String> names = new HashSet<>(Arrays.asList(new String[] {"barry", "matty", "olly","joey"}));
      
      if (names.contains(name)) {
          ...
      }
      

      由于您似乎并不关心名称的顺序,而只想测试集合是否包含名称,因此 HashSet 是最好的数据结构:HashSet.contains() 以恒定时间运行 (O( 1)),而 List.contains(),例如,是 O(n)。

      阅读collections tutorial

      【讨论】:

        【解决方案3】:

        您可以改为循环遍历您的数组:

        String name = kb.nextLine();
        if(contains(name)) {
            System.out.println("you are verified you may use the lift");
        }
        
        
        public boolean contains(String name) {
            String [] names = {"barry", "matty", "olly","joey"}; 
            for (int i = 0; i < names.length; i++) {
                if(names[i].equals(name)) {
                    System.out.println("you are verified you may use the lift");
                }
            }
        

        或者您可以使用List.contains(),在这种情况下,您必须在List 中添加您的姓名,而不是常规数组。

        例如:

        String[] names = {"barry", "matty", "olly", "joey"}; 
        List<String> namesList= Arrays.asList(names);
        
        if (namesList.contains(name)) {
            System.out.println("you are verified you may use the lift");
        }
        

        【讨论】:

          【解决方案4】:

          使用 ArrayList 和 List 代替字符串数组:

          List<String>names = new ArrayList<String>(names); 
          name = kb.nextLine();
          if(names.indexOf(name)>-1)System.out.println("you are verified you may use the lift");
          

          这是因为 List 中的 indexof 如果未找到则返回 -1 或创建的元素的索引,从 0 开始。

          我也这么认为

          if(names.contains(name))System.out.println("you are verified you may use the lift");
          

          作品

          【讨论】:

            【解决方案5】:

            使用 for 循环

            get input
            for int i = 0, i < array size i++
            if input.equals(array[i]) then do stuff
            

            如果你切换到arraylist,你可以做if(array.contains(input))

            【讨论】:

              猜你喜欢
              • 2015-12-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-14
              • 2020-08-09
              相关资源
              最近更新 更多