黑马程序员技术交流社区

标题: 一个很有意思的java问题,我愣了好一会的!!! [打印本页]

作者: 阮文江    时间: 2015-8-11 23:56
标题: 一个很有意思的java问题,我愣了好一会的!!!
public class Test
{
    public static void main()
    {
        int a = 10;
        int b = 20;
        /*调用方法*/
        meth(a,b);  //要求在调用方法之后打印出a=100,b=200 请写出meth()的代码
        System.out.println("a="+a);
        System.out.println("b="+b);
     }
}

QQ图片20150811234959.png (63.91 KB, 下载次数: 31)

QQ图片20150811234959.png

作者: 大木木    时间: 2015-8-12 00:06
原谅我没看出亮点在哪里?
作者: yangkai69    时间: 2015-8-12 00:12
public void jisuan(int a,int b)
{
        for(int c=0;c<10;c++)
                {
                   a=a+10;
                   b=b+10;
                }
}

这样子可以吗?
作者: kenfans    时间: 2015-8-12 10:27
b=b*a
a=a*a
作者: cat73    时间: 2015-8-12 10:49
办法也不是没有,不过根据Java的限制,想要去修改a跟b的值基本是不可能做到的(如果可以请指出- - 咱也是新手),所以可以考虑另外一种思路,那就是对输出语句进行Hook,这点在我以前的帖子里有提到过,原帖如下↓
http://bbs.itheima.com/thread-171478-1-1.html
那么问题就简单了,将单个int参数的输出语句重写即可,重写为输出传入参数的10倍:
  1. private static void meth() {
  2.     System.setOut(new PrintStream(System.out) {
  3.         public void println(int x) {
  4.             super.println(x * 10);
  5.         }
  6.     });
  7. }
复制代码

因懒得开Java的IDE,以上代码没有做测试,见谅。



作者: dddlinux    时间: 2015-8-12 11:57
这个这么做到的?
作者: rxtm    时间: 2015-8-12 15:38
meth(int x,int y){
    a=100;
    b=200;
}
不就得了
作者: boboyuwu    时间: 2015-8-12 16:03
嗨这是啥问题啊  不就这么写么
作者: boboyuwu    时间: 2015-8-12 16:05
method1(int a,int b){
  system.out.printl("a=100,b=100");
}
或者
method1(int a,int b){
a=100,b=100;  
system.out.printl("a="+a+"b="+b);

}  这样不就行了
作者: boboyuwu    时间: 2015-8-12 17:32
boboyuwu 发表于 2015-8-12 16:05
method1(int a,int b){
  system.out.printl("a=100,b=100");
}

这也叫有意思啊  就是弄个method1方法  a ,b值传进来然后改变a,b值不就行了
作者: 星语千寻    时间: 2015-8-12 18:33
路过。。。。。
作者: pengbeilin    时间: 2015-8-12 20:09
  1. public static void meth(int a,int b)
  2.         {
  3.                  System.out.println("a="+100);
  4.                  System.out.println("b="+200);
  5.                  System.exit(10);
  6.         }
复制代码

虽然比较逗必!但就是这么简单!
作者: 黄蒙    时间: 2015-8-12 20:47
pengbeilin 发表于 2015-8-12 20:09
虽然比较逗必!但就是这么简单!

这个太机智了,直接调用+退出。。。原谅我笑一会儿
作者: pengbeilin    时间: 2015-8-12 20:57
黄蒙 发表于 2015-8-12 20:47
这个太机智了,直接调用+退出。。。原谅我笑一会儿

因为楼主说只要打印的结果是那个就好了,而实参的值的值应该是改不了(以为现在所学的java知识来看的话),
如果是C的话就很简单。{:2_32:}
作者: 大头爱傻瓜    时间: 2015-8-12 21:13
楼主这个问题,让我看了真长知识 谢谢
作者: shuguang    时间: 2015-8-12 21:25
定义一个方法,让a和b都乘以10
作者: 黑色幽默K    时间: 2015-8-12 21:31
......................
作者: 朝花夕拾7    时间: 2015-8-12 21:58
private static void meth(int a, int b) {
                a = a*10;
                b = b*10;
                System.out.println("a=" + a);
                System.out.println("b=" + b);
                System.exit(0);
        }
作者: pengbeilin    时间: 2015-8-12 22:05
本帖最后由 pengbeilin 于 2015-8-12 22:06 编辑
pengbeilin 发表于 2015-8-12 20:0

我现在只能用我知识范围内的东西去解决,而且并没有违背楼主的规则~    -。-当然我相信会有更好的解决方法~
作者: 星耀    时间: 2015-8-12 22:11
java是值传递,所以还是12楼的方法正确
作者: 蓬头小道士    时间: 2015-8-12 22:15
调用主函数的构造函数,重新给a,b赋值。
作者: 黑进制    时间: 2015-8-12 22:29
我是来看评论的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2