如何使用带有 If 语句的数组

Posted

技术标签:

【中文标题】如何使用带有 If 语句的数组【英文标题】:How to use an Array with an If statement 【发布时间】: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,依此类推... 大家好,感谢您的回复。我正在使用它来完成如下。我希望用户在输入“一”时输入“一”,它会播放测试声音或做任何事情。然后我希望用户输入“两个”,然后它会做任何我决定让它做的事情。但是所有这些复杂性的原因是因为我需要用户先输入“一”,然后他才能访问当他输入“二”时会发生什么,希望你们现在能更清楚地理解它。让我知道如何将数组加一...... 【参考方案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,循环将执行如下:

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

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

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);

【讨论】:

以上是关于如何使用带有 If 语句的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有 Liquid 的 if 语句中使用多个参数

如何在颤动中使用带有容器小部件的 if 语句

如何正确使用带有if语句的bool?

如何在 Tcl 中使用带有期望的 if 语句进行远程登录?

如何使用 ? : 带有 Razor 和内联代码块的 if 语句

html 如何在带有Liquid的if语句中使用多个参数