java吧 关注:1,235,464贴子:12,702,863

java调用一个交换两个int的方法(一个价值5k的看似简单的题目)

只看楼主收藏回复

main方法不要动,上面可以随意修改。我想要的执行效果如下:
交换前a=1 b=2
交换后a=2 b=1。
注意,若只是交换两个int类型的值,我至少可以写3种,难点是,调用这个方法之后,输出的是交换的值。


1楼2017-07-27 15:09回复
    难度在哪里?


    IP属地:四川来自iPhone客户端2楼2017-07-27 15:28
    收起回复
      值传递还是啥?返回一个数组应该也不符合要求吧?
      坐等高手来


      IP属地:四川来自iPhone客户端3楼2017-07-27 15:48
      回复
        这道题没有任何意义


        IP属地:浙江4楼2017-07-27 15:55
        回复
          看不出哪里价值5k了,不是指难度,而且用途


          IP属地:广东来自Android客户端5楼2017-07-27 15:59
          回复
            招聘服务生要求会高等数据 会计算微积分


            IP属地:安徽6楼2017-07-27 15:59
            回复
              一。定义一个临时变量
              int temp = a;
              a = b;
              b = temp;
              二。直接在输出操作
              System.out.println("交换后a="+b+" b="+a);
              三。位移
              a = a ^ b;
              b = a ^ b;
              a = a ^ b;
              四。加减法
              a = a + b;
              b = a - b;
              a = a - b;


              IP属地:上海7楼2017-07-27 16:02
              收起回复
                有人要软件开发的常用单词吗?可以看看互相补充啊!企鹅:1650041234.备注干嘛的


                IP属地:北京8楼2017-07-27 16:09
                回复
                  如果仅仅按照这道题的方式去做,那根本不可能,因为是值传递。


                  IP属地:广东10楼2017-07-27 16:25
                  收起回复


                    11楼2017-07-27 16:27
                    收起回复
                      1. a,b 都是局部变量,调用方法之后怎么改变局部变量的值?
                      来一个不算解法的解法:
                      TestAdd里面的代码;直接调用之后强行结束,哈哈,最后一句main的语句不会输出。哈哈
                      System.out.println("交换后a="+b+" b="+a);
                      System.exit(0);


                      IP属地:四川12楼2017-07-27 16:35
                      收起回复
                        int a1 = b;
                        int b1 = a;
                        Filed f = Interger.class.getDeclaredField("value");
                        f.setAccessible(true);
                        f.set(a,a1);
                        f.set(b,b1);
                        ----因为方法的参数是对象,只能传递值,如果直接在里面写a=b,那么就改变了对象的引用,不会起效果,而通过反射强制改变Integer class对象的value属性,则没有改变对象引用


                        13楼2017-07-27 16:37
                        收起回复
                          /**
                          * 交换int---by木木DR
                          * @param a
                          * @param b
                          */
                          public static void test(Integer a,Integer b) {
                          try {
                          Field field = Integer.class.getDeclaredField("value");
                          field.setAccessible(true);//去除private
                          //去除final影响
                          Field modifiersField = Field.class.getDeclaredField("modifiers");
                          modifiersField.setAccessible(true);
                          modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
                          //交换
                          int temp = b;
                          field.set(b, a);
                          field.set(a, new Integer(temp));
                          } catch (Exception e) {
                          e.printStackTrace();
                          }
                          }


                          14楼2017-07-27 16:48
                          收起回复
                            Integer虽然是int的包装类,但你看源码会发现该类是由final修饰的,形参的改变不会影响实参,所以不可能有解


                            IP属地:山东15楼2017-07-27 17:05
                            回复
                              14楼


                              IP属地:山东16楼2017-07-27 17:09
                              回复