索引帮助Java

时间:2014-02-23 20:29:48

标签: java arrays

我想知道是否有办法获得索引,让我给你看一个例子。

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将是此实例中的数据库。

6 个答案:

答案 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也是此场景的不错选择。这只是一个指针,您需要深入挖掘以找到适合您需要的数据结构。有关更多信息,您可以请参阅以下链接:

TreeSet

HashMap

答案 5 :(得分:0)

您可以将数组转换为列表,然后使用contains方法在列表中搜索名称:

if(Arrays.asList(names).contains(CMD[3]))
    System.out.println("My name is " + CMD[3] + "!");