Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将if语句转换为三元运算符-编译器抱怨它不是语句_Java_If Statement_Compiler Errors_Conditional Operator - Fatal编程技术网

Java 将if语句转换为三元运算符-编译器抱怨它不是语句

Java 将if语句转换为三元运算符-编译器抱怨它不是语句,java,if-statement,compiler-errors,conditional-operator,Java,If Statement,Compiler Errors,Conditional Operator,错误消息在点上;这里需要一个语句,而三元表达式不是一个。java中的大多数东西要么是语句,要么是表达式;选择的几件事是:方法调用(包括“奇怪”的调用,如构造函数调用)、赋值(a=5,以及a+=5),以及一元运算符,如a++) 我不知道你说的“高效”是什么意思。if语句与三元运算符一样,速度快、性能好 如果您的意思是更短,则不需要大括号: if(counter.compareAndExchange(100,0)==100)System.out.println(“跟踪”);else counter.

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

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

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

if(counter.compareAndExchange(100,0)==100)System.out.println(“跟踪”);else counter.getAndIncrement()–所有这些都适用于同一行,但是否符合您的风格偏好是您的决定


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

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

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

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

if(counter.compareAndExchange(100,0)==100)System.out.println(“跟踪”);else counter.getAndIncrement()–所有这些都适用于同一行,但是否符合您的风格偏好是您的决定


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

如果
生成语句,则三元运算符生成表达式。Java不允许在需要语句的地方使用表达式(也不生成语句)。换句话说,
…?…
不能正确替换
,如果(…)。。。否则…
在所有情况下。
如果
生成语句,则三元运算符生成表达式。Java不允许在需要语句的地方使用表达式(也不生成语句)。换句话说,
…?…
不能正确替换
,如果(…)。。。else…
在所有情况下。“效率”,我的意思是是否可以在不使用AtomicInteger和CAS方法的情况下实现相同的逻辑。@VijayakumarChava好吧,你想实现什么?尝试这样做:
捕获(异常e){如果(计数==100){//每100次,以线程安全的方式记录。错误(e);}else{logger(e.getMessage();}}}最终,我以这种方式每一百次记录一次跟踪:`final private ThreadLocalRandom random=ThreadLocalRandom.current();@Test public void testTLR(){if(50==random.nextInt(100)){System.out.println(“跟踪”);}else{System.out.println(“no trace:”;}}}“Efficiency”,我的意思是,是否可以在不使用AtomicInteger和CAS方法的情况下实现相同的逻辑。@VijayakumarChava嗯,您试图实现什么?尝试这样做:
捕获(异常e){if(count==100){//每100次,以线程安全的方式logger.error(e);}else{logger(e.getMessage());}}最终,我以这种方式每100次记录一次跟踪:`final private ThreadLocalRandom random=ThreadLocalRandom.current();@Test public void testTLR(){if(50==random.nextInt(100)){System.out.println(“跟踪”);}其他{System.out.println(“无跟踪”);}
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();
        }

    }

}
    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: ");
    }
}