我想知道是否有办法获得索引,让我给你看一个例子。
String[] names = {"Daniel", "Lewis", "Sarah", "John"};
String cmd = input.nextLine();
String CMD[] = cmd.split(" ");
if (CMD[0].equalsIgnoreCase("my name is") && CMD[1].equalsIgnoreCase(accountIndex[0])){
System.out.println("My name is Daniel!");
} else if (CMD[0].equalsIgnoreCase("my name is") && CMD[1].equalsIgnoreCase(accountIndex[1])) {
System.out.println("My name is Lewis!");
} else if (CMD[0].equalsIgnoreCase("my name is") && CMD[1].equalsIgnoreCase(accountIndex[2])) {
System.out.println("My name is Sarah!");
} else if (CMD[0].equalsIgnoreCase("my name is") && CMD[1].equalsIgnoreCase(accountIndex[3])) {
System.out.println("My name is John!");
}
有没有比嵌套if语句更简单的方法呢?
请注意,我只想在表格中使用名称,所以我不能只使一个名为myName的字符串等于CMD [1]。
我认为它有点像用户名数据库,如果您的用户名不存在,则无法登录。
我想要它,但没有嵌套if语句的加载,并且名称Array将是此实例中的数据库。
答案 0 :(得分:1)
您可以尝试for
循环:
for (int i = 0; i < names.length(); i++) {
if (CMD[3].equalsIgnoreCase(accountIndex[i])) {
System.out.println("My name is " + names[i] + "!");
break;
}
}
答案 1 :(得分:1)
运行cmd.split()
将拆分数组,为您提供一个数组:{"my", "name", "is", "some_name"}
。这意味着您要检查的名称将在数组中的第四个元素处给出,因此索引为[3]
。
String[] names = {"Daniel", "Lewis", "Sarah", "John"};
String cmd = input.nextLine();
String CMD[] = cmd.split(" ");
// Initial check to see if my name is exists.
if(cmd.subtstring(0, 10).equalsIgnoreCase("my name is") && cmd.length > 3)
{
// This loop is better than checking each individual case because it allows you to dynamically add elements to your names array
for(int i = 0; i < names.length; i++)
{
// Must start at the fourth element since my, name, and is will be the 0-2 elements.
if(CMD[3].equalsIgnoreCase(names[i]))
{
System.out.println("My name is "+names[i]+"!");
break;
}
}
}
答案 2 :(得分:1)
你可以做到
List<String> names = Arrays.asList("Daniel", "Lewis", "Sarah", "John");
if (names.contains(CMD[3]) {
System.out.println("My name is " + CMD[0]);
} else {
// not found...
}
答案 3 :(得分:1)
你正在分裂一个空间,所以
CMD[0].equalsIgnoreCase("my name is")
永远不会评估为真。
为什么要测试"my name is "
?只需捕获第四个单词,如果这是您正在使用的格式:CMD[3]
。
要避免使用这些if-else-if-elses,请将名称放入Map中,其中键是名称,值始终为null
。
然后根据键测试名称:
if(mapOfNames.containsKey(CMD[3]))
答案 4 :(得分:0)
您可以将有效的用户名存储在TreesSet中,然后当用户输入名称时,您可以查找TreeSet以测试给定的名称是否为有效名称。
TreeSet<String> validNames = new TreeSet<String>();
validNames.add("John");
validNames.add("Mary");
.....
.....
// For searching
if(validNames.contains(CMD[0]))
{
// name exists
}
else{
// invalid name
}
注意:您可以将名称存储在任何可搜索的集合中(HashMaps也是此场景的不错选择。这只是一个指针,您需要深入挖掘以找到适合您需要的数据结构。有关更多信息,您可以请参阅以下链接:
答案 5 :(得分:0)
您可以将数组转换为列表,然后使用contains
方法在列表中搜索名称:
if(Arrays.asList(names).contains(CMD[3]))
System.out.println("My name is " + CMD[3] + "!");