这是一个面试问题的“计数和说出”问题,我正在尝试使用以下代码来解决它:
public static String countAndSay(int n) {
char[] c = new char[] { '1' };
StringBuffer buffer = null;
for (int i = 1; i < n; i++) {
buffer = new StringBuffer();
int start = 0;
int len = c.length;
for (int j = 1; j <= len; j++) {
if (j == len || c[j] != c[start]) {
buffer.append(j - start);
buffer.append(c[start]);
start = j;
}
}
c = buffer.toString().toCharArray();
}
return new String(c);
}
public static void main(String[] args) {
System.out.println(countAndSay(2));
}
这是问题的描述: count-and-say序列是整数序列,开头如下: 1,11,21,1211,111221,......
1作为“一1”或11读出.11作为“两个1”或21读出.21作为“一个2,然后一个1”或1211读出。给定一个整数n,生成第n序列。
这是一个可运行的代码。但是对于行if (j == len || c[j] != c[start])
,如果我将其更改为if (c[j] != c[start] || j == len)
,则会出现错误java.lang.ArrayIndexOutOfBoundsException。我很困惑为什么两个条件的不同顺序对于OR运算符会有不同的结果。提前谢谢!
答案 0 :(得分:2)
if (j == len || c[j] != c[start])
true---^ ^------Expression is NOT evaluated
if (j == len || c[j] != c[start])
false---^ ^------Expression is evaluated
如果第一个表达式为true
,那么在OR
运算符
答案 1 :(得分:0)
如果第一个表达式的计算结果为“true”,那么当表达式由OR
运算符
答案 2 :(得分:0)
对Or运算符进行求值,以便按从左到右的顺序计算选项,当第一个选项为true
时,整个语句为true。这意味着,如果您(valid-statement || invalid-statement)
且valid-statement
为true
,则invalid-statement
永远不会被评估。