如何使用带有 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 语句的数组的主要内容,如果未能解决你的问题,请参考以下文章