一、算法练习

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  • 例如,121 是回文,而 123 不是。

输入:x = 121 输出:true


输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。


 

bool isPalindrome(int x){        
    int flag=x;
    int m=0;
    long int res = 0;
    while (x>0){
        m=x%10;  //读取个位数值
        x /=10;  //删除个位数值
        res= res*10+m;
    }
    if(res ==flag)
    return true;
    else return false;
}

 解题思路 定义一个flag用来接受最初x的值(因为x的值经过循环体会改变) 创建一个while循环,每循环一次 m用来获取x的个位数 x的个位被消除 res用来计算最终值,定义为长整型(测试数据可能太大,int存放不下) 当x等于0时,退出循环 if判断语句判断res和flag是否相等

二、面向对象的特征之一:封装性

面向对象的特征:封装、继承、多态;

为什么需要封装性?
类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚,低耦合”

高内聚、低耦合是软件工程中的概念,也是UNIX 操作系统设计的经典原则。
内聚,指一个模块内各个元素彼此结合的紧密程度;
耦合指一个软件结构内不同模块之间互连程度的度量。
内聚意味着重用和独立,耦合意味着多米诺效应牵一发动全身。

而“高内聚,低耦合”的体现之一:
高内聚 :类的内部数据操作细节自己完成,不允许外部干涉,
低耦合:仅暴露少量的方法给外部使用,尽量方便外部调用
 

通俗的说:把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想
 

2.如何实现数据封装?
    2.1权限修饰,分别:private 、缺省、protected、public

    2.2作用:可以使用四种权限修饰类及类的内部成员,这些成员或类被调用时的可见性大小。
案例示例:

public  class AnimalTest {
    public static void main(String[] args){
        Animal animal1= new Animal();
            animal1.name = "金蟾";
          animal1.setlegs(2);
         // System.out.println(legs);//因为Animal类中legs的权限修饰符为private私有的;
        System.out.println("name:"+animal1.name+"\nlegs:"+animal1.getintln());
        animal1.eat();
    }

    public static class Animal{//动物
        //属性
        String name;//名字
        //在类的内部可以调用私有的,出了Animal就看不见了
        //可以通过setlegs方法间接调用
        private int legs;//腿的个数,

        public void setlegs(int l){
            if(l >= 0 && l % 2 == 0){
                legs = l;
            }else{
                System.out.println("你的数据非法");
            }
        }
        //获取legs的属性值
        public int getintln(){
            return legs;
        }
        public void eat(){
            System.out.println("动物觅食");
        }
    }
}

在案例中给Animal的对象的Legs属性赋值。在实际的常识中,我们知道Legs不能赋值为负数的。但是如果直接调用属性Legs,是不能加入判断逻辑的。那怎么办呢?
将Legs属性私有化(private),禁止在Animal类的外部直接调用此属性。
提供给Legs属性赋值的setLegs()方法,在此方法中加入Legs赋值的判断逻辑f(legs =  && Legs % 2 ==0)V将此方法暴露出去,使得在Animal类的外部调用此方法,对Legs属性赋值。
提供给Legs属性获取的getLegs()方法,此方法对外暴露。使得在Animal类的外部还可以调用此属性的值.

修饰符从小到大public、protected 、缺省 、private。

具体修饰的结构:
。外部类: public、缺省
。成员变量、成员方法、构造器、成员内部类: public、protected、缺省、private

2.4  4种权限的具体使用
其中外部类:可以使用public、缺省;
类的内部成员:可以使用4种权限进行修饰。

2.5开发中四种权限使用频率情况:
比较高:public,private
比较低:缺省、protected

3.封装的体现
场景1:私有化类的属性,提供公开(public)的get和set方法,,对此属性进行获取或修改
场景2:将类中不需要对外暴露的方法,设置为private。  
场景3:单例模式中构造器private的了,避免在类的外部创建实例。(在static关键字后讲)

封装性练习:
练习一:
创建程序,在其中定义两个类:Person和PersonTest类。定义如下:
用setAge()设置人的合法年龄(0~130),用getAne()返回人的年龄。在PersonTest类中实例化Person类的对象b,调用setAqe()和getAge()方法,体会Java的封装性

public class Person {
     private int age;//设置了private私有的,类外无法调用。    //设置age属性
     public void setAge(int a){
         if(a>=0&&a<=130){
             age = a;
         }else{
             System.out.println("你输入的年龄不合法");
         }
     }    //获取age属性
     public int getAge(){
         return age;
     }public class PersonTest {
     public static void main(String[] args){
         //创建Person实例1
         Person p1=new Person();
         //p1.age = 10;//编译不通过;被设置了private
         //System.out.println(p1.age);        p1.setAge(20);//通过调用setAge();方法来修改Person中的age
         System.out.println(p1.getAge());//通过调用getAge()来获取age;    }
 }


练习二:
案例:自定义图书类设定属性包括书名bookName,作者author,价格price;
方法包括相应属性的get/set方法图书信息介绍等。

public class Book {
     private String bookName;//书名
     private String author;//作者
     private double price;//价格    //方法
     public String getBookName(){
         return bookName;
     }
     public void setBookName(String s){
         bookName = s;
     }
     public String getAuthor(){
         return author;
     }
     public void setAuthor(String s){
         author = s;
     }
     public double getPrice(){
         return price;
     }
     public void setPrice(int x){
         if(x>=0){
             price = x;
         }else{
             System.out.println("你的输入非法");
         }
     }}
public class BookTest {
     public static void main(String[] args){
         //创建实例对象
         Book p1 = new Book();        // p1.bookName ="java从入门到精通";
         //Book所有的属性的权限修饰符都使用了private私有化了必须调用相关函数来编写
         p1.setBookName("java从入门到精通");
         p1.setAuthor("桂锦超");
         p1.setPrice(120);        System.out.println("书名:"+p1.getBookName()+"\n作者:"+p1.getAuthor()+"\n价格:"+p1.getPrice());
    }
 }

练习三
声明员工类Employee,
包含属性:姓名、性别、年龄、电话,属性私有化
提供get/set方法
提供String getInfo()方法  新建数组

public class Employee {
     //员工属性
     private String name;//姓名
     private char gender;//性别
     private int age;//年龄
     private String phoneNUmber;//电话号码    //方法
     public void setName(String x){
         name = x;
     }
     public String getName(){
         return name;
     }
     public void setGender(char x){
         gender = x;
     }
     public char getGender(){
         return gender;
     }
     public void setAge(int x){
         if(x>=0){
             age = x;
         }else{
             System.out.println("你输入的数据非法");
         }
     }
     public int getAge(){
         return age;
     }
     public void setPhoneNUmber(String x){
         phoneNUmber = x;
     }    public String getPhoneNUmber() {
         return phoneNUmber;
     }
     public String getInfo(){
         return getName()+"\t"+getGender() + "\t" + getAge() +"\t" +getPhoneNUmber();
     }}
package er;
import java.util.Scanner;
public class EmployeeTest {
     public static void main(String[] args) {
         //创建对象
         Scanner scan = new Scanner(System.in);         //创建Employee[]
         Employee[] emps = new Employee[2];        for (int i = 0; i < emps.length; i++) {
             emps[i] = new Employee();            System.out.println("-------------------添加第" + (i + 1) + "名员工-------------------");
             System.out.print("姓名:");
             String name = scan.next();
             System.out.print("性别:");
             char gender = scan.next().charAt(0);
             System.out.print("年龄:");
             int age = scan.nextInt();
             System.out.print("电话:");
             String phoneNumber = scan.next();            //给指定的employee对象的各属性赋值
             emps[i].setName(name);
             emps[i].setGender(gender);
             emps[i].setAge(age);
             emps[i].setPhoneNUmber(phoneNumber);        }
         //遍历员工列表
         System.out.println("---------------------员工列表---------------------");
         System.out.println("编号\t姓名\t性别\t年龄\t电话");
         for(int i=0;i< emps.length;i++){
             System.out.println((i+1)+"\t"+emps[i].getInfo());
         }
         System.out.println("-----------------------完成-----------------------");
     }
 }

 

java自定义一个图书类 java定义图书book类_学习