【问题标题】:Java recursion with ternary operator on a method [duplicate]在方法上使用三元运算符的Java递归[重复]
【发布时间】:2013-04-25 02:06:48
【问题描述】:

为什么这个码位中使用的三元运算会起作用?

public static void main(String [] args) throws IOException {
    try (BufferedReader br = new BufferedReader(new InputStreamReader( System.in ))) {
        String hello;
        while ((hello = br.readLine()) != null)
            System.out.println ( ( hello.matches( ".*h+.*e+.*l.*l.*o+.*" ) ) ? "YES" : "NO"); //this line works
    }
    catch ( NullPointerException xNE ) { }                  
}

但它不适用于此:

private static void Print_denom( int num ) {
    if ( num > 1 ) {
        System.out.print(num + " ");
        isEven ( num ) ? Print_denom( num>>1 ) : isPrime(num) ? Print_denom(1) : Print_denom(num/Coins.div); //this one doesn't
    }               
}

?

编辑: 我想我现在明白了。如果我将第二个功能更改为:

private static int Print_denom( int num ) {
    if ( num > 1 ) {
        System.out.print(num + " ");
        return isEven ( num ) ? Print_denom( num>>1 ) : isPrime(num) ? Print_denom(1) : Print_denom(num/Coins.div);
    }
    return 0;           
}

然后就可以了。谢谢大家

【问题讨论】:

标签: java methods conditional-operator


【解决方案1】:

三元运算只能用于返回一个表达式。在第一个代码块中,这是"YES""NO"

但是,在第二个代码块中,您只是使用它来调用一个方法

它并不比以下任何一行更有效:

2;
"A";
someVariableName;

【讨论】:

  • 这是否与三元运算符在条件执行后调用的函数无效的事实有关?将函数的类型更改为 int 或 boolean 会改变这一点吗?
  • @WChargin 方法调用是表达式
猜你喜欢
  • 2015-03-25
  • 2014-09-29
  • 2015-09-07
  • 2020-08-02
  • 1970-01-01
  • 2013-11-20
  • 2017-03-24
  • 2012-10-02
  • 1970-01-01
相关资源
最近更新 更多