( ?: )这个运算符 : 两边的数应该是相同类型的
但我这个怎么可以输出
for(int i=0;i!=19;++i)    
   System.out.print(" "+(i<10?i:(char)(i+87)+" "));

解决方案 »

  1.   

    i小于10时,直接输出i的数值,
    否则 把i+87作为字符的ascii并输出字符
      

  2.   

    谁跟你说的需要相同类型?尽量不要在条件运算的操作数中使用不同的数据类型,并且条件运算符与 if...else 结构性质并不是完全相同的。下面是 Java Language Specification 上关于条件表达式的说明● 如果第二和第三个操作数在可以转换为数值类型时,会有以下几种情况:
      ◆ 操作数其中一个是 byte 或 Byte 类型,而另一个是 short 或 Shoft 类型,那么这个表达式就是 shoft 类型
      ◆ 操作数中的一个是类型 T (T 可以是 byte、short 或者是 char 类型),而另一个是 int 类型的常数,其可以用 T 类型来表示时,那么这个表达式就是 T 类型
      ◆ 操作数中的一个是 Byte 类型,而另一个是 int 类型的常数,其可以用 byte 类型来表示,那么这个表达式就是 byte 类型
      ◆ 操作数中的一个是 Short 类型,而另一个是 int 类型的常数,其可以用 short 类型来表示,那么这个表达式就是 short 类型
      ◆ 操作数中的一个是 Character 类型,而另一个是 int 类型的常数,其可以用 char 类型来表示,那么这个表达式就是 char 类型
      ◆ 否则,双目数值提升(binary numeric promotion)会被用于操作数的类型中,条件表达式的类型是第二个和第三个操作数提升后的类型。注意:双目数值提升时进行拆箱转换和值集转换(value set conversion)PS:这里只是部分的,更多的看 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#341287
      

  3.   

    三目运算符,我们通常这么用,列:int j = i<10?i:i-10。这样的话两边的数就应该是相同类型。
      

  4.   

    那为什么这样,就只输出数,而不会被强转为char呢?
    for(int i=0;i!=19;++i)   
      System.out.print(" "+(i<10?i:(char)(i+87))+" "); 
      

  5.   

    int c;
    c=(int)(char)(11+87); ======》98
    lz说的对两者类型要一致,所以编译器默认将char(i+87)又强制转换为int了!
      

  6.   

    小类型的和大类型的做运算时,应该向大类型的转变
    所以是char向int型转变,不是变成char型的。
      

  7.   

    对了是不是
    (i<10?i:(char)(i+87)+" ") 的话两个都变成String了?
      

  8.   


    这个 我还真的不知道啊。不过,应该不会吧。一个入参为int型的方法,你可以传进去一个char型变量,但是如果参数类型是String的,好像不可以传入int型的吧。