针对用户输入测试字符串和整数数组
Posted
技术标签:
【中文标题】针对用户输入测试字符串和整数数组【英文标题】: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");
【问题讨论】:
【参考方案1】:我认为您只是在寻找List.contains
- 但这当然需要List
而不是数组。这里有两个明显的选择。
首先,您可以使用List<String>
开头:
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))
【讨论】:
以上是关于针对用户输入测试字符串和整数数组的主要内容,如果未能解决你的问题,请参考以下文章