黑马程序员技术交流社区

标题: 成员变量的小问题 [打印本页]

作者: 黎健东    时间: 2012-8-28 16:30
标题: 成员变量的小问题
本帖最后由 黎健东 于 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呢

作者: 唐志兵    时间: 2012-8-28 16:33
本帖最后由 唐志兵 于 2012-8-28 16:49 编辑

这个简单。
把两个变量的值改为true不就得了。
作者: 黎健东    时间: 2012-8-28 16:52
唐志兵 发表于 2012-8-28 16:33
这个简单。
把两个变量的值改为true不就得了。

......万一用户调用另一个方法,这个方法是需要输出false的呢

作者: 于启会    时间: 2012-8-28 17:16
  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. }
复制代码
这样就可以了
作者: 黎健东    时间: 2012-8-28 17:34
本帖最后由 黎健东 于 2012-8-28 17:38 编辑
于启会 发表于 2012-8-28 17:16
这样就可以了

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

就没有方法可以这样

我给这个方法一个boolean类型的变量,这个方法就改变这个boolean变量的值?

作者: 杨鹏鹏    时间: 2012-8-28 17:35
你看看这种行不
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;
    }
   
}
作者: 于启会    时间: 2012-8-28 17:56
黎健东 发表于 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呢? 这时候必须要判断了,然后在赋值。
作者: 黎健东    时间: 2012-8-28 18:23
于启会 发表于 2012-8-28 17:56
使用三元表达式判断也可以减少代码。

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

通过反射拿到boolean变量名,然后就可以将变量名传递到a方法中了?呵呵,不知可行否
作者: 申俊伟    时间: 2012-8-28 18:40
你的问题出在A在类中的a方法,在a方法中,isright是一个形参,形参在调用结束后就会释放,你给它赋值是没有意义的。它不会将返回带给实参。所以调用了a方法后实参值是不会变的。想要将结果带回给实参可以将返回值赋给实参。你的void mehtod1()和void mehtod2()方法实际上相当于那两个字段的get方法,所以你想改变isRight1和isRight2的值就要用set方法。





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