我试图将我的java代码从if/else块转换为三元运算符.
我的代码正在做的是找到一个数组的位置,例如,已经出现了所有整数值的位置,
如果是数组 {1,1,3,4,2,3,4,5,1,4}
答案是7因为当我的程序迭代到7th位置时,它已经发现所有先前的数字小于5.
如果数组是{3,1,1,2,1,3}答案将是3因为当我的程序迭代到3数组的位置时,它已经迭代了所有小于的值3.
现在,当我使用if/else块时,我的代码工作正常.
这是对我来说绝对合适的代码,
public static int solution1 (int arrayMaxValue, int[] myArray){
boolean b[] = new boolean[arrayMaxValue + 1];
for (int i = 0; i < myArray.length; i++) {
if (!b[myArray[i]]){
b[myArray[i]] = true;
if (b[myArray[i]]==true)
arrayMaxValue--;
}
if (arrayMaxValue==0) return i;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
但如果我将其if块转换为ternary operator ?
它输出错误,
public static int solution2 (int arrayMaxValue, int[] myArray){
boolean b[] = new boolean[arrayMaxValue + 1];
for (int i = 0; i < myArray.length; i++) {
b[myArray[i]] = (!b[myArray[i]]) ? true : false;
if (b[myArray[i]]){
arrayMaxValue--;
}
if (arrayMaxValue==0) return i;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
这是我检查它的方式,
int[] myArray = { 1,1,1,2,3,4,1 };
// _ _ _ _ _
int arrayMaxValue =4;
System.out.println(solution1(arrayMaxValue, myArray));
System.out.println("==============================");
System.out.println(solution2(arrayMaxValue, myArray));
Run Code Online (Sandbox Code Playgroud)
上面数组的输出应该是5因为当循环迭代到位置5时,所有小于或等于的值4都被发现,第一个解决方案给出正确答案但第二个解决方案没有.
这是上述数组的两种解决方案的输出,
5
==============================
4
Run Code Online (Sandbox Code Playgroud)
我在三元运算符中做错了什么?
在三元运算符版本中,arrayMaxValue如果b[myArray[i]]在执行三元运算符后为真,则递减,并且三元运算符否定值b[myArray[i]].
b[myArray[i]] = (!b[myArray[i]]) ? true : false;
Run Code Online (Sandbox Code Playgroud)
是相同的
b[myArray[i]] = !b[myArray[i]];
Run Code Online (Sandbox Code Playgroud)
在原始版本中,arrayMaxValue只有当b[myArray[i]]从false更改为true时才会递减,并且您永远不会b[myArray[i]]从true 更改为false.
我不认为三元运算符在您的代码中很有用,因为您的条件不仅仅是b[myArray[i]]根据条件分配值- 它还具有递减的副作用arrayMaxValue.您可以通过以下方式简化代码:
if (!b[myArray[i]]) {
b[myArray[i]] = true;
arrayMaxValue--;
}
Run Code Online (Sandbox Code Playgroud)
为了让三元运算符b[myArray[i]]为原始代码分配相同的值,它应该是:
b[myArray[i]] = (!b[myArray[i]]) ? true : b[myArray[i]];
Run Code Online (Sandbox Code Playgroud)
(这是一种复杂的写作方式b[myArray[i]] = true;)
但是arrayMaxValue--当b[myArray[i]]它存在并且保持为真时也将被执行,这与原始实现的逻辑不同.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |