gpt4 book ai didi

java - 将 if 语句转换为三元运算符 - 编译器提示它不是语句

转载 作者:行者123 更新时间:2023-12-02 01:02:50 25 4
gpt4 key购买 nike

package com.myname.zed;

import org.junit.Test;
import java.util.concurrent.atomic.AtomicInteger;


public class MyTest
{

AtomicInteger counter = new AtomicInteger(100);

@Test
public void testAtomic()
{
for (int i = 1; i < 610; i++) {
if (counter.compareAndExchange(100, 0) == 100) {
System.out.println("trace");
}
else {
counter.getAndIncrement();
}
}
}

/* converted if to ternary, it is not compiling now */

@Test
public void testAtomic1()
{
for (int i = 1; i < 610; i++) {
counter.compareAndExchange(100, 0) == 100 ? System.out.println("trace") : counter.getAndIncrement();
}

}

}

我只需要在 100 次中打印一次日志行。当我使用 if 语句编写时,它按预期工作。我将“if”转换为三元,编译器提示它不是一个语句。

我在这里错过了一些非常简单的事情吗?还有其他有效的方法来编写这个逻辑吗?

我最终做了类似的事情,每 100 次记录一次跟踪(可能不是很准确,但它符合我的需求):

    final private ThreadLocalRandom random = ThreadLocalRandom.current();
@Test
public void testTLR()
{
if (50 == random.nextInt(100)) {
System.out.println("trace");
}
else {
System.out.println("no trace: ");
}
}

最佳答案

错误消息是正确的;你需要在那里有一个声明,而三元表达式不是一个。 java中的大多数东西要么是语句,要么是表达式;选择的一些事情是:方法调用(包括“奇怪”的调用,例如构造函数调用)、赋值(a = 5,以及a += 5),和一元运算符,例如 a++)。

我不确定你所说的“高效”是什么意思。 if 语句与三元运算符一样快速、性能良好。

如果您的意思是更短,则不需要大括号:

if (counter.compareAndExchange(100, 0) == 100) System.out.println("trace"); else counter.getAndIncrement(); – 全部都适合一行,但是否符合您的风格偏好是您的决定。

Java 中没有神奇的“允许我将任何和所有表达式视为语句”选项。

关于java - 将 if 语句转换为三元运算符 - 编译器提示它不是语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60444081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com