我有一个ArrayList
类型Boolean
,我想要计算连续出现的True或False。
我的循环代码有效,但我很困惑如何处理第一个元素。我正在尝试执行以下操作:
for(int i=0;i< Answers.size();i++) {
if(Answers.get(i-1).booleanValue()= = Answers.get(i).booleanValue())
...
对于i=0
,我当然会-1=0
如果我从i=1
开始,我会遗漏第一个元素
那我怎么算数呢?
答案 0 :(得分:1)
关键是:可能会有几个部分。所以你需要更复杂的东西。在那个意义上:
第一步是确定你到底要做什么&#34;输出&#34;这里。假设你有:
true, true, false, true, false, false, false, true, true, true
结果应该是什么?你想知道吗:
true: 2 (because there are is one subsequence with 2 values)
或
true: 2, 3 (because you got two sequences, one with 2, one with 3 values)
含义:您必须澄清您的要求,以准确理解您的代码必须执行的 ;之前你甚至应该考虑&#34;如何做到这一点&#34;!
关于具体问题:您只需要特殊检查,例如
if (i == 0) {
then of course you can't do i--
但是如上所述:这只对你当前的循环有帮助;但它并没有帮助你解决真正的问题。因为你甚至没有定义你想做的事情!
答案 1 :(得分:1)
您可以使用状态机 - 您需要记住最后的答案和重复次数,当答案更改为相反值时您重置。像这样:
public class CountBooleans {
public static void main(String[] args) {
boolean[] answers = new boolean[20];
answers[16] = true;
answers[17] = true;
answers[18] = true;
countConsecutiveRepetitions(answers);
}
private static void countConsecutiveRepetitions(boolean[] answers) {
boolean lastAnswer = answers[0];
int repetitionCount = 0;
for (boolean answer : answers) {
if (answer == lastAnswer) {
repetitionCount++;
} else {
System.out.println("There was: " + lastAnswer + " * " + repetitionCount);
lastAnswer = answer;
repetitionCount = 1;
}
}
System.out.println("There was: " + lastAnswer + " * " + repetitionCount);
}
}
将打印:
There was: false * 16
There was: true * 3
There was: false * 1
答案 2 :(得分:1)
我的java代码计算列表中的连续发生次数:
public static void main(String[] args) throws IOException {
ArrayList<Boolean> fruit = new ArrayList<>();
fruit.addAll(Arrays.asList(true, true, true, true, false, false, false, false, true,true,false,false,true,true,false));
int trueCount = 0, falseCount = 0;
List<Integer> trueCounts = new ArrayList<>();
List<Integer> falseCounts = new ArrayList<>();
for (int i = 0; i < fruit.size();) {
Boolean value = fruit.get(i);
while (i < fruit.size() && fruit.get(i)) {
trueCount++;
i++;
}
while (i < fruit.size() && !fruit.get(i)) {
falseCount++;
i++;
}
trueCounts.add(trueCount);
falseCounts.add(falseCount);
trueCount=0;
falseCount=0;
}
System.out.println(trueCounts);
System.out.println(falseCounts);
}
打印:
[4, 2, 2]
[4, 2, 1]
答案 3 :(得分:0)
为了澄清关于起点的第一个问题,请尝试以下代码,该代码将比较连续位置的所有配对值:(0, 1), (1, 2) ... (n-2, n-1)
,其中n = answers.size()
。
for(int i = 1; i < answers.size(); i++) {
if(answers.get(i-1).booleanValue() == answers.get(i).booleanValue()) {
...
}
}
现在,...
更加复杂。您必须跟踪true
和false
个连续值之间的变化。
答案 4 :(得分:0)
这是你的答案,
for(int i=0;i< Answers.size();i++)
{
if (i > 0) {
if(Answers.get(i-1).booleanValue()==Answers.get(i).booleanValue())
{
}
}
}
让我知道它是否适合您。我还有其他方法可以解决这个问题。