本帖最后由 kokobox 于 2009-04-30 11:47:38 编辑

解决方案 »

  1.   

    本帖最后由 java2000_net 于 2009-04-29 06:58:47 编辑
      

  2.   

    想不出来,我看直接Math.max(a,b)好了,我放弃。
      

  3.   

    ==应该不算吧,不然怎么办?我的意思是a和b总要运算,然后呢,得出的结果总要有个参照,要参照最起码要用到==。我在想jvm底层是如何实现比较运算的?
      

  4.   

    可以用接口comparable来实现,只要实现它的方法compareTo()方法即可原理可以参考此接口的使用,我写了个例子,可以参考一下,结果是正确的。public class Test1 implements Comparable<Integer>{
    private int a;


    public Test1(){

    }
    public Test1(int c){
    this.a=c;

    }
    public int getA() {
    return a;
    }
    public void setA(int a) {
    this.a = a;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int i=new Test1(-2147483648).compareTo(2147483647);
    if(i>0){
    System.out.println("a>b");
    }else if(i<0){
    System.out.println("a<b");
    }else{
    System.out.println("a=b");
    }

    }
    public int compareTo(Integer i) {
    // TODO Auto-generated method stub
    if(a<i)
    return -1;
    if(a>i)
    return 1;
    return 0;
    }
    }
      

  5.   

    我们方法是重写compareTo方法而已,很简单。
      

  6.   

    你绕了这么大弯子,用到了i>0那为什么不直接判断a-b>0呢?  不让用比较符的。==算是擦边吧  呵呵
      

  7.   

    成就啊!---变态的问题解决了  一个> < ==都没有用到
    判断的时候建议用下正则---为了速度我用了equals判断  
    public static void main(String[] args) {
    compareTwoInt(23, -45);
    }

    public static void compareTwoInt(int a, int b){

    int c = 0;
    //此处最好采用正则表达来判断a b 的类型0 ,正,负;为了方便我就将就下了,-我也采用了equalsji
    //建议用正则表达
    if(String.valueOf(a).equals("0")&&String.valueOf(b).equals("0")){
    System.out.println("a等于b");
    }
    if(!String.valueOf(a).equals("0")&&String.valueOf(b).equals("0")){
    if(String.valueOf(a).contains("-")){

    System.out.println("a小于b");
    }
    System.out.println("a大于b");

    }
    //b不等于0
    if(!String.valueOf(b).equals("0")){
     c = a/b;
     
    switch (c) {

    case 0:
    //a,b 都为正
    if(!String.valueOf(a).contains("-")&&!String.valueOf(b).contains("-")){
    System.out.println("a小于b");
    }
    //a 为负,b为负
    if(String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
    System.out.println("a大于b");
    }
    //a 为负,b为正
    if(String.valueOf(a).contains("-")&&!String.valueOf(b).contains("-")){
    System.out.println("a小于b");
    }
    // b 为负,a为正
    if(!String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
    System.out.println("a大于b");
    }
    break;
    case 1:
    //a/b=1的情况有a>b(a/b=1.32...)存在
    //a 为负,b为正
    if(String.valueOf(a).contains("-")&&!String.valueOf(b).contains("-")){
    System.out.println("a小于b");
    }
    // b 为负,a为正
    if(!String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
    System.out.println("a大于b");
    }

    if(String.valueOf(a).equals(String.valueOf(b))){
    System.out.println("a等于b");
    }

    else{
    System.out.println("a大于b");
    }

    break;
    default:
    //a 为负,b为负
    if(String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
    System.out.println("a小于b");
    }
    // a 为负,b为正
    if(String.valueOf(a).contains("-")&&!String.valueOf(b).contains("-")){
    System.out.println("a小于b");
    }
    // b 为负,a为正
    if(!String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
    System.out.println("a大于b");
    }
    else{
    System.out.println("a大于b");
    }
    }
    }



    }
      

  8.   

    变态题目!直接来个true/false算了
      

  9.   

    public String compare(Integer x,Integer y){
      String [] buf={"=>","<"};
      int id1=(x-y)>>>31;   
      System.out.println(id1);
      return buf[id1];
    }
      

  10.   

    int max(int a, int b) {
      return a+b;
    }
    不过感觉还是会有像LZ说的越界问题
      

  11.   


    楼主我想说的是用
    PS:哥,看到我5#的回复没?不让用类库里的方法 
    switch (b) {

    case 0:
    case 1:
    判断正负
    这样不就可以去掉== 
      

  12.   


    用异常应该可以
    如下:(效率可能很低,不过觉得结果还是可以的)
    public class Test
    {
    public static void main(String[] args)
    {
    int a=1,b=2;
    Test test=new Test();
    test.my_Compare(a,b);
    }
    public void my_Compare(int a,int b)
    {
    int aa=10,bb=10;
    while(true)
    {
    try
    {
    a=a++;
    aa=aa/a;
    System.out.println("a="+a);
    }
    catch(Exception e)
    {
    System.out.println("a 大");
    System.exit(0);
    }
    try
    {
    b=b++;
    bb=bb/b;
    System.out.println("b="+b);
    }
    catch(Exception e)
    {
    System.out.println("b 大");
    System.exit(0);
    }
    }
    }
    }
      

  13.   

    上面写错了,应该把a=a++改成a++;
    b=b++改成b++;
      

  14.   

    基于大家的讨论,我提出个方法boolean[] judge = {true,false};
    if(judge[-(int) (((long)a-(long)b)>>63)])
        System.out.println("a is the bigger one");
    else
        System.out.println("b is the bigger one");
      

  15.   

       public void compare(Integer x,Integer y){
       String [][]buf={{"=","="},{">","<"}}; 
       int id1=((x-y)^(y-x))>>31;
           id1=id1*id1;
       int id2=(x/2-y/2)>>>31;
       System.out.println(x+buf[id1][id2]+y);
       }这个应该可以吧~~
      

  16.   

    ?????怎么没出来呢??
    在发一遍    public void compare(Integer x,Integer y){
       String [][]buf={{"=","="},{">","<"}}; 
       int id1=((x-y)^(y-x))>>31;
           id1=id1*id1;
       int id2=(x/2-y/2)>>>31;
       System.out.println(x+buf[id1][id2]+y);
       }可以的话要给分啊,呵呵~
      

  17.   

    max(a,b)=(a+b+abs(a-b))/2
    min(a,b)=(a+b-abs(a-b))/2
      

  18.   

    小弟想了个方法,不知道对不对,请纠正
    1判断a和b是否相等if(a==b) 结束;else 进入2中;
    2判断a和b的符号是否相同?
      if((a^b)>>31)  System.out.print("a和b是同号的");
      else  a和b异号
    3当 a和b异号 的时候
       if(a>>31)  System.out.print("a大于b");
       else  System.out.print("b大于a");4当 a和b同号的时候
       (1).if(a>>31) System.out.print("a和b是非负的");
           int c=a-a&b;
            int d=b-a&b;
           
           for(int k=1;k<=32;k++)
           {
              if(c>>k) {System.out.print("a大于b");break;}
              if(d>>k) {System.out.print("b大于a");break;}
           }     (2).else 
             {
                int x=~a;
                int y=~b;
                调用 4(1),当x大于y,a小于b,当y大于x时,a大于b;
             } 
         
      

  19.   

    第4步的
    for(int k=32;k!=0;k--)给忘了不能用比较运算符 呵呵也不知道对么?
      

  20.   

    //这个方法,x是0的情况不能处理,希望高手解决
    int max(int x, int y){
       int[] buf = {x, y};
       return buf[y/x];
    }
      

  21.   

    http://heisetoufa.javaeye.com/blog/227687 
    这里有答案
      

  22.   

    int[] intArray = new int[2] ;intArray[0] = a ;
    intArray[1] = b ;int index = (a - b) >>> 31 ;intArray[index] 就是那个最大的值
      

  23.   

    Java好麻烦啊.可不可以,先判断正负. 然后两个数异或一下. 找到第一个1. 然后在比较.
      

  24.   

    不用比较运算符,判断int型的a,b两数的大小的答案感谢18楼
      

  25.   

    int a=2,b=3;a = a-b;
        a = a>>31;
    if(a)
        printf("a<b \n");
    else
        printf("a>=b\n");
      

  26.   


    如涉及溢出问题可以改成int id1 =(int)((long)x-y>>>63);
      

  27.   

      7 int main()
      8 {   
      9     int a=2, b=3;
     10     int c;
     11     
     12     c = a-b;
     13     c = c>>31;
     14     if(c)
     15         printf("a<b \n");
     16     else{ 
     17         c = b-a;
     18         c = c>>31;
     19         if(c)
     20             printf("a>b\n");
     21         else
     22             printf("a==b\n");
     23     }
     24 
     25     return 0;
     26 }
      

  28.   

    我不会java语法,我把那个java程序写成vc++形式是这样吗?
    #include<stdio.h>
    void main()
    {int a=20;
     int b=5;
     int max=((a-b)>>31)*b+((b-a)>>31)*a;/*是这样改写的吗?如果是,我运行出来的全都是带负号*/
     printf("%d",max);
    }
    如果不是,请高手指点。
      

  29.   

    c++实现
    /*
    返回值:
    >0       x > y
    0       x == y
    <0      x < y
    */
    int compare(int x, int y)
    {
        int tmp = x - y;
        if ( (x >> 31) ^ (y >> 31))
        {
            
            if ((x >> 31) ^ (tmp >> 31))
            {
                return ~tmp;
            } 
            else
            {
                return tmp;
            }
        } 
        else
        {
            return tmp;
        }
    }
      

  30.   

    int max(int a, int b) {
    int[] max = { a, b };
    return max[-((a - b) >> 31)];
    }
      

  31.   

    雷人 我想到的解决方法是复杂的菜鸟在这里学习了ding 
    http://heisetoufa.javaeye.com/blog/227687
    public static void main(String[] args) {
    compareTwoInt(0, 0);
    compareTwoInt(-12, -11);
    compareTwoInt(-12, 0);
    compareTwoInt(0, 0);
    compareTwoInt(2, 2);
    compareTwoInt(-12, -12);
    compareTwoInt(-2, 3);
    compareTwoInt(3, -3);
    compareTwoInt(3, -2);
    compare(1,0);

    /**
     * 判断正负 true>0
     * 
     * @param a
     * @return
     */
    public static boolean parserInt(int a) { switch (a >>> 31) {
    case 0:
    return true;
    case 1:
    return false;
    default:
    return false;
    } } /**
     * 判断是否为0
     * 
     * @param a
     * 
     */
    public static boolean parserIntZero(int a) { switch (a) {
    case 0:
    return true;
    default:
    return false;
    } } public static void compareTwoInt(int a, int b) { int c = 0;
    // 此处最好采用正则表达来判断a b 的类型0 ,正,负;为了方便我就将就下了,-我也采用了equalsji
    // 建议用正则表达
    if (parserIntZero(a) && parserIntZero(b)) {
    System.out.println("a等于b");
    }
    if (!parserIntZero(a) && parserIntZero(b)) {
    if (!parserInt(a)) { System.out.println("a小于b");
    }else{
    System.out.println("a大于b");
    }
    }

    // b不等于0
    if (!parserIntZero(b)) {
              c=a/b;
    switch (c) { case 0:
    // a,b 都为正
    if (parserInt(a) && parserInt(b)) {
    System.out.println("a小于b");
    }
    // a 为负,b为负
    if (!parserInt(a) && !parserInt(b)) {
    System.out.println("a大于b");
    }
    // a 为负,b为正
    if (!parserInt(a) && parserInt(b)) {
    System.out.println("a小于b");
    }
    // b 为负,a为正
    if (parserInt(a) && !parserInt(b)) {
    System.out.println("a大于b");
    }
    break;
    case 1: // a 为负,b为正
    if (!parserInt(a) && parserInt(b)) {
    System.out.println("a小于b");
    }
    // b 为负,a为正
    if (parserInt(a) && !parserInt(b)) {
    System.out.println("a大于b");
    }
    // a/b=1的情况有a>b(a/b=1.32...)存在
    else {
    // 获得余数
    int m = a % b;
    switch (m) {
    case 0:
    System.out.println("a等于b");break;
    default:
    // a 为负,b为负
    if (!parserInt(a) && !parserInt(b)) {
    System.out.println("a小于b");
    }
    // a,b 都为正
    if (parserInt(a) && parserInt(b)) {
    System.out.println("a大于b");
    }
    break;
    }
    } break;
    default:
    // a 为负,b为负
    if (!parserInt(a) && !parserInt(b)) {
    System.out.println("a小于b");
    }
    // a 为负,b为正
    if (!parserInt(a) && parserInt(b)) {
    System.out.println("a小于b");
    }
    // b 为负,a为正
    if (parserInt(a) && !parserInt(b)) {
    System.out.println("a大于b");
    } else {
    System.out.println("a大于b");
    }
    }
    } }
      

  32.   

    我是一个新手学java才半年了我觉的你们都好麻烦哦
    把他们放在数组里面一个排序Array.sort不就好了嘛