A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黎健东 中级黑马   /  2012-8-28 16:30  /  1758 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黎健东 于 2012-8-28 16:31 编辑
  1. public class Test {

  2.     /**
  3.      * @param args
  4.      */
  5.     public static void main(String[] args) {
  6.         // TODO Auto-generated method stub
  7.         A a = new A();
  8.         a.mehtod1();
  9.         System.out.println(a.isRight1());
  10.         a.mehtod2();
  11.         System.out.println(a.isRight2());
  12.     }

  13. }

  14. class A{
  15.     private boolean isRight1 = false;
  16.     private boolean isRight2 = false;

  17.     public boolean isRight1() {
  18.         return isRight1;
  19.     }

  20.     public boolean isRight2() {
  21.         return isRight2;
  22.     }

  23.    
  24.     public A() {
  25.     }
  26.    
  27.     //只修改right1,不动right2
  28.     void mehtod1(){
  29.         a(isRight1);
  30.     }
  31.    
  32.     void mehtod2(){
  33.         a(isRight2);
  34.     }
  35.    
  36.     void a(boolean isRight){
  37.         isRight = true;
  38.     }
  39.    
  40. }
复制代码
上诉代码无法输出true。
如果单独写this.isRight的话可以输出true,可做这样又无法提高代码复用性,大家有什么方法可以输出两个true呢

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

8 个回复

正序浏览
你的问题出在A在类中的a方法,在a方法中,isright是一个形参,形参在调用结束后就会释放,你给它赋值是没有意义的。它不会将返回带给实参。所以调用了a方法后实参值是不会变的。想要将结果带回给实参可以将返回值赋给实参。你的void mehtod1()和void mehtod2()方法实际上相当于那两个字段的get方法,所以你想改变isRight1和isRight2的值就要用set方法。
回复 使用道具 举报
于启会 发表于 2012-8-28 17:56
使用三元表达式判断也可以减少代码。

按照你的想法传过来一个boolean类型的变量,然后改变这个变量的值 ...

通过反射拿到boolean变量名,然后就可以将变量名传递到a方法中了?呵呵,不知可行否
回复 使用道具 举报
黎健东 发表于 2012-8-28 17:34
如果有10个Booeland调用,也要写10个这种比较方法了?...

就没有方法可以这样
  1. public class test3 {



  2.     /**


  3.      * @param args


  4.      */


  5.     public static void main(String[] args) {


  6.         // TODO Auto-generated method stub


  7.         A a = new A();


  8.         a.mehtod1();


  9.         System.out.println(a.isRight1());


  10.         a.mehtod2();

  11.         

  12.         System.out.println(a.isRight2());


  13.     }



  14. }



  15. class A{


  16.     private boolean isRight1 = false;


  17.     private boolean isRight2 = false;



  18.     public boolean isRight1() {


  19.         return isRight1;


  20.     }



  21.     public boolean isRight2() {


  22.         return isRight2;


  23.     }



  24.    
  25.     public A() {


  26.     }


  27.    
  28.     //只修改right1,不动right2


  29.     void mehtod1(){


  30.         a(isRight1);


  31.     }


  32.    
  33.     void mehtod2(){


  34.         a(isRight2);


  35.     }


  36.    
  37.     void a(boolean isRight){

  38.             /*
  39.             if(isRight==this.isRight1){ //通过==判断传过来的值是否与该类中的值地址相等,如果相等,就把该类中的值改成true;

  40.                     this.isRight1=true;

  41.             }else if(isRight==this.isRight2){

  42.                     this.isRight2=true;

  43.             }
  44.        */
  45.             this.isRight1=isRight==this.isRight1?true:false;  //用三元表达式也可以的
  46.             this.isRight2=isRight==this.isRight2?true:false;
  47.     }

  48. }
复制代码
使用三元表达式判断也可以减少代码。

按照你的想法传过来一个boolean类型的变量,然后改变这个变量的值,它传过来的这个boolean类型的变量具体是哪个值在方法中根本不知道,只有false或者true。那他是这个类中的isRight1呢还是isRight2呢? 这时候必须要判断了,然后在赋值。
回复 使用道具 举报
你看看这种行不
package com.it.test;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        A a = new A();
        a.mehtod1();
        System.out.println(a.isRight1());
        a.mehtod2();
        System.out.println(a.isRight2());
    }

}

class A{
    private boolean isRight1 = false;
    private boolean isRight2 = false;

    public boolean isRight1() {
        return isRight1;
    }

    public boolean isRight2() {
        return isRight2;
    }

   
    public A() {
    }
   
    //只修改right1,不动right2
    void mehtod1(){
        a(this);
    }
   
    void mehtod2(){
        a(this);
    }
   
    void a(A a){
        a.isRight1=true;
        a.isRight2=true;
    }
   
}

点评

你把a方法都改成让这两个变量为true,如果用户只调用mehtod1,输出right1和right2的值时,right2就为true了,而本身成员变量就默认他为false了  发表于 2012-8-28 17:42
回复 使用道具 举报
本帖最后由 黎健东 于 2012-8-28 17:38 编辑
于启会 发表于 2012-8-28 17:16
这样就可以了

如果有10个Booeland调用,也要写10个这种比较方法了?...

就没有方法可以这样

我给这个方法一个boolean类型的变量,这个方法就改变这个boolean变量的值?
回复 使用道具 举报
  1. public class test3 {


  2.     /**

  3.      * @param args

  4.      */

  5.     public static void main(String[] args) {

  6.         // TODO Auto-generated method stub

  7.         A a = new A();

  8.         a.mehtod1();

  9.         System.out.println(a.isRight1());

  10.         a.mehtod2();
  11.         
  12.         System.out.println(a.isRight2());

  13.     }


  14. }


  15. class A{

  16.     private boolean isRight1 = false;

  17.     private boolean isRight2 = false;


  18.     public boolean isRight1() {

  19.         return isRight1;

  20.     }


  21.     public boolean isRight2() {

  22.         return isRight2;

  23.     }


  24.    
  25.     public A() {

  26.     }

  27.    
  28.     //只修改right1,不动right2

  29.     void mehtod1(){

  30.         a(isRight1);

  31.     }

  32.    
  33.     void mehtod2(){

  34.         a(isRight2);

  35.     }

  36.    
  37.     void a(boolean isRight){

  38.             if(isRight==this.isRight1){ //通过==判断传过来的值是否与该类中的值地址相等,如果相等,就把该类中的值改成true;
  39.                     this.isRight1=true;
  40.             }else if(isRight==this.isRight2){
  41.                     this.isRight2=true;
  42.             }
  43.     }
  44. }
复制代码
这样就可以了

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
唐志兵 发表于 2012-8-28 16:33
这个简单。
把两个变量的值改为true不就得了。

......万一用户调用另一个方法,这个方法是需要输出false的呢
回复 使用道具 举报
本帖最后由 唐志兵 于 2012-8-28 16:49 编辑

这个简单。
把两个变量的值改为true不就得了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马