【问题标题】:How to use an Array with an If statement如何使用带有 If 语句的数组
【发布时间】:2013-05-09 10:35:29
【问题描述】:

我是 Java 新手。我不太确定如何在 Java 中有效地使用数组。我可能无法使用正确的术语,因此我将尝试用代码向您展示。 基本上,这是我的数组。

int[] arrayCount = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};

我想设置我的 if 函数,以便(假设 arrayCount[1] 是默认值....如果该数组处于 [1] 的第一个状态,并且 "one".equals(match)然后它将数组设置为arrayCount [2],然后从那里开始。基本上,如果“one” = match,它应该将arrayCount设置为2,如果“two” = match并且第一个if语句已经执行,它将播放测试声音。最终这条链会一直到 100,但这只是为了测试。

for (String match : matches) {
                if (arrayCount[1]== 1 && "one".equals(match)) {
                    testSound.start();
                    arrayCount[2]=2; 
                } else if (arrayCount[2]==2 && "two".equals(match)) {
                    testSound.start();

                }

【问题讨论】:

  • 通常使用for loops处理数组。
  • 你能解释一下matches数组...以及你想要完成什么。
  • 你也失去了你的 1,因为它的 arrayCount[0]
  • 是的,@lifus 是正确的,Java(和 Android)中的数组以 0 作为第一个元素开始。在您的示例中,arrayCount[0] 为 1,arrayCount[1] 为 2,依此类推...
  • 大家好,感谢您的回复。我正在使用它来完成如下。我希望用户在输入“一”时输入“一”,它会播放测试声音或做任何事情。然后我希望用户输入“两个”,然后它会做任何我决定让它做的事情。但是所有这些复杂性的原因是因为我需要用户先输入“一”,然后他才能访问当他输入“二”时会发生什么,希望你们现在能更清楚地理解它。让我知道如何将数组加一......

标签: java android arrays string if-statement


【解决方案1】:

据我了解,您可能想创建一个这样的数组列表:

String[] array = ["zero", "one", "two"];
ArrayList<String> mArrayList = new ArrayList<String>(Arrays.asList(array));
int index = mArrayList.indexOf(user_input);
//use the index to play the appropriate sound...

【讨论】:

    【解决方案2】:

    希望我正确理解了这个问题。您希望用户按顺序输入“一”、“二”、“三”等单词,并在成功输入的每一步播放测试声音?

    在这种情况下,请考虑以下事项:

    import java.util.Queue;
    import java.util.LinkedList;
    
    Queue<String> inputs = new LinkedList<String>();
    inputs.push("one");
    inputs.push("two");
    inputs.push("three");
    // etc
    // Then to check the user input
    for (String match : matches) {
      if (match.equals(inputs.peek())) {
        inputs.pop(); // Removes the element you just matched
        testSound.start();
      }
    }
    

    请注意,这假设您希望在每一步都采取相同的操作。如果您能多描述一下您对“正确响应”行为的要求,我可以提供更准确的答案。

    我们使用上面的队列,因为它展示了First-In-First-Out 排序。这意味着匹配项必须按照它们添加的顺序出现(上面的所有推送语句)。在循环内部,当匹配成功时,将检查下一个所需匹配。例如,对于包含 ("three", "two", "one") 和 matches 包含 ("one", "two", "thirty") 的 Queue,循环将执行如下:

    1. 匹配“one”将与队列头“one”进行比较
    2. 这匹配,所以我们“弹出”头部,将(“三”,“二”)留在队列中
    3. 下一场比赛,“二”将与队列的头部(现在是“二”)进行比较
    4. 这匹配,所以我们再次弹出头部,将(“三个”)留在队列中
    5. 下一场比赛,“三十”将与队列头(现在是“三”)进行比较
    6. 这不匹配,因此队列不会发生进一步的变化

    如果您想对每个匹配项具有特定的行为(即,当“一个”匹配时执行某些操作,然后在“两个”匹配时执行其他操作等),您可以连接如下内容(除了以上)

    public interface MatchAction {
      public void doTheThing();
    }
    
    Map<String, MatchAction> actionMap = new HashMap<String,MatchAction>();
    // Fill this bad boy up
    actionMap.put("one", new MatchAction() { public void doTheThing() { /* do stuff */ } });
    // Etc for each action (you can reuse instances here if some actions are the same)
    // Then, we modify the check above to be:
    for (String match : matches) {
      if (match.equals(inputs.peek())) {
        String input = inputs.pop();
        MatchAction action = actionMap.get(input);
        if (action != null) action.doTheThing();
      }
    }
    

    【讨论】:

    • 差不多,我把用户输入消息的方式都想通了。只是我希望用户的输入首先是“一个”,然后他才能让应用程序响应任何其他输入。在应用程序从用户那里收到“一”之后,它会寻找“二”并且只寻找“二”。如果用户输入的是“二”,并且他之前输入过“一”,那么“二”的动作将起作用。
    • 我在上面发布的基于队列的解决方案将满足您的需求。也就是说,它只会在匹配之前检查“一”,然后它只会在匹配之前检查“二”,等等。
    • 添加了一些关于如何对每场比赛进行特定操作的提示
    • 啊,初学者的常见错误是没有注意到这一点。谢谢。
    • 另外,这又是我的初学者方面的话题,但由于某种原因,我得到了一个 inputs.push 红线下推...。你能向我解释一下修复是什么以及这是怎么回事正在使用。我不应该将“LinkedList”更改为“matches”吗?我在“pop”下也有一条红线....只是在这里说清楚,我正在使用 SpeechRecognizer 将结果放入数组列表中。
    【解决方案3】:

    “如果该数组处于 [1] 的第一个状态......它将数组设置为 arrayCount[2]”没有意义。数组没有“状态”。

    数组是一种创建大量相同类型的变量或对象的简单方法。而不是像这样声明 5 个int 变量:

    int num1 = 234;
    int num2 = 635;
    int num3 = 3568;
    int num4 = 23;
    int num5 = 745;
    

    你可以这样做:

    int[] nums = {234, 635, 3568, 23, 745};
    

    然后你可以像这样引用它们:

    System.out.println(nums[2]);
    

    这将打印数字 3568(因为数组是从 0 开始的,nums[0] 将是 234)。

    请说明你想要完成什么(尽量不要在你的描述中使用代码),我会给你一些你想要的代码。

    【讨论】:

    • 这是我之前评论的转载——大家好,感谢您的回复。我正在使用它来完成如下。我希望用户在输入“一”时输入“一”,它会播放测试声音或做任何事情。然后我希望用户输入“两个”,然后它会做任何我决定让它做的事情。但是所有这些复杂性的原因是因为我需要用户先输入“一”,然后他才能访问当他输入“二”时会发生什么,希望你们现在能更清楚地理解它。让我知道如何将数组加一......
    【解决方案4】:

    基本上你要找的是这样的 HasMap:

    Map<String,Integer> map = new HashMap<String,Integer>();
    map.put("one",1);
    map.put("two",2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      相关资源
      最近更新 更多