黑马程序员技术交流社区

标题: 编译错误,求解决 [打印本页]

作者: 付左军    时间: 2012-4-24 13:16
标题: 编译错误,求解决
class Person
        {
                private int age;//(只能在该类中访问)
                public void setAge(int a)
                {
                        if (a>0)
                        {
                        age=a;
                        speak();
                        }
                        else
                        System.out.println("feiha");
                }

                public int getAge(int a)
                {
                        return age;
                }

                void speak()
                {
                        System.out.println("age="+age);       
                }
        }

class PersonDemo
        {
                public static void main(String [] args)
                {
                        Person p=new Person();
                        p.age=-20;
                        p.speak();
                }
        }

编译时提示错误2个,提示最后一行大括号非法字符,语法分析时已达到文件尾
作者: 付左军    时间: 2012-4-24 13:26
class Person
        {
                private int age;//(只能在该类中访问)
                public void setAge(int a)
                {
                        if (a>0)
                        {
                        age=a;
                        speak();
                        }
                        else
                        System.out.println("feiha");
                }

                public int getAge(int a)
                {
                        return age;
                }

                void speak()
                {
                        System.out.println("age="+age);       
                }
        }
class PersonDemo
{
        Person p= new Person();
        p.setAge(-20);//编译时,需要标识符?
        p.speak();//需要标识符?

}


作者: 付左军    时间: 2012-4-24 13:30
2了没填主函数。、。。。
作者: 真真姐    时间: 2012-4-24 14:07
本帖最后由 杨国祯 于 2012-4-24 14:08 编辑

第一个问题、实际上错误就在于,私有的变量,外部使用必须通过get set方法
所以应该改为

       Compile p =
new Compile();
              p.setAge(-20);      // 对于另一个类的变量的访问,必须通过get set方法
       p.speak();
第二个问题,你发的不详细不太了解你什么意思
作者: 乔建国    时间: 2012-4-24 14:15
这样写比较规范一点
class Person{
   private int age;                //此处设置为私有,对外隐藏age属性用于保护数据
   public void setAge(int age){     // 对外提供对应的set方法,对年龄进行赋值
      if(age<0||age>130){            //比较正常的年龄范围
          System.out.println("你输入的年龄有误!");
  
          }
        this.age=age;               
    }
   public int getAge(){              // 对外提供对应的get方法,对年龄进行访问
             return age;
         }
    void speak(){                     
       System.out.println("age="+age);
    }
}

public class PersonDemo{
    public static void main(String[] args){
      Person p=new Person();
       p.setAge(20);                        //对年龄进行赋值
       p.speak();
       System.out.println("age="+p.getAge());//对年龄进行访问

   }
}

作者: 崔仁军    时间: 2012-4-24 16:13
有4个问题  
1 是在set 值时  不用调用speak 方法
2 在get方法时不用传入参数
3 没用写主函数  没有主函数程序是不能执行的    因为主函数是程序的入口
4 我认为要获取age属性   直接用get方法     speak 方法是多余的
我修改的程序如下

class Person
         {
                 private int age;//(只能在该类中访问)
                 public void setAge(int a)
                 {
                         if (a>0)
                         {
                         age=a;
                        
                         }
                         else
                         System.out.println("feiha");
                 }

                public int getAge()
                 {
                         return age;
                 }
          }
class PersonDemo
{
         public   static  void main (String [] args )
         {
               Person p= new Person();
               p.setAge(-20);
          int  b = p.getAge();
                System.out.println("age=" + b );
           }

}






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