解析java数据过滤的思想

解析java数据过滤的思想

1 含义

不符合条件的数据过滤掉,只允许符合条件的数据被赋值。就类似于高考分数线,一本分数线会过滤掉上不了一本的学生。

2 为什么要用

因为封装的其中一个作用是保证输入数据的合理性,而保证输入的数据合理就应该用到今天我给大伙分享的数据过滤思想

3 如何用?

3.1 限制修改的次数

3.1.1 典型例题

存在一个Student类,新建一个Student对象,需要实例化对象的时候给属性sex赋值,但是该属性只允许设置一次,当你第二次设置时,会在控制台打印"性别经过初始化后就不能修改"的信息

3.1.2 示例代码
Student
package Work;
public class Student {
     private String name;
     //姓名
     private String sex;
    //年龄
    private boolean flag=true;
    //判断性别属性是否是第一次修改,第一次修改完成后会把其值改为false
    public Student() {
    }

    public Student(String name, String sex) {
        this.name = name;
        setSex(sex);
        //调用本类中的setSex方法,保证性别只允许被初始化一次
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        if(flag){
            this.sex = sex;
            flag=false;
            //设置完第一次后,就不能再去对其更改了,因而flag改为false
        }else{
            System.out.println(name+"的性别已经被初始化一次了,不允许再次修改了!!!!!!");
        }
    }
}


TestStudent
package Work;

public class TestStudent {
    public static void main(String[] args) {
        Student student=new Student("张三","男");
        System.out.println("再次修改性别前,"+student.getName()+"同学的性别为: "+ student.getSex());
        student.setSex("女");
        System.out.println("再次修改性别后,"+student.getName()+"同学的性别为: "+ student.getSex());
    }
}

3.1.3 示例代码运行截图

在这里插入图片描述

3.1.4 思路总结
a 若只能修改的次数是一次

a.1 定义一个boolean类型的变量flag,默认为true

a.2 赋值前需要进行if条件判断,若flag为true,则条件成立,执行里面的赋值语句,并把flag设置为false,

a.3 非首次(第一次)去调用方法的时候,flag为false了,条件不成立,因此不会执行里面的赋值语句

b 若只能修改的次数不是一次,假设为n次

b.1 可以设置一个count变量(初始为0),

b.2 把++count<=n作为if判断的条件

若count的值小于等于n,那么条件成立,会执行里面的赋值语句

若count值大于n,那么条件不成立,就不会执行里面赋值语句

3.2 不符合条件放前面,符合条件的内容放后面

3.2.1 典型例题

存在一个Student类,新建一个Student对象,需要实例化对象的时候给属性age赋值,只允许输入的age在10-20之间,当你输入不符合条件的年龄,会在控制台输出"设置年龄不成功,年龄应在10岁到20岁之间"然后其里面的age属性还是默认值0

3.2.2 示例代码
Student
package Work;
public class Student {
     private String name;
     //姓名
    private int age;
    //年龄,范围为: [15,20]
    public Student() {
    }

    public Student(String name,int age) {
        this.name = name;
        setAge(age);
        //调用本类中的setAge方法,保证通过构造方法初始化年龄的时候也是符合要求的
        //如果输入有误,那年龄默认就是0
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age<15||age>20){
            System.out.println("设置年龄不成功,年龄应在10岁到20岁之间");
            return;
            //return;的作用是直接结束方法,这个用法只可以在返回值类型为void的方法里面使用
        }
        this.age = age;
    }
}


TestStudent
package Work;

public class TestStudent {
    public static void main(String[] args) {
        Student student=new Student("张三",8);
        System.out.println("设置不符合条件的年龄时: "+student.getName()+"同学的年龄为: "+ student.getAge());
        student.setAge(18);
        System.out.println("正确修改年龄后,"+student.getName()+"同学的年龄为: "+ student.getAge());
    }
}

3.2.3 示例代码运行截图

在这里插入图片描述

3.2.4 思路总结

a.把不符合条件的数据先在前面用单if过滤掉。若进入if条件后,会打印数据不合法并通过return;结束方法
b.当if条件不成立时,意味着数据合法,可以进行后面的赋值操作了

3.3 特殊场景的公式放前面,通用公式放后面

3.3.1 典型例题

存在一个Person类,存在属性salary(薪水)、 workingHours(工作小时数)、hourlyWage(时薪),薪水的计算规则为: 工作小时数*时薪,但超过160小时的薪水会按照1.5倍数去进行计算,先需要你建立两个Person对象,分别测试没超过160小时的薪水和超过160小时的薪水.

3.3.2 示例代码
Person
package Work;
public class Person {
    private String name;
    //年龄
    private double salary;
    //月薪,计算规则为工作小时*时薪,其中超过160小时,会有1.5倍的薪水
    private int workingHours;
    //工作小时数
    private double hourlyWage;
    //时薪
    public Person() {
    }
    //薪水是需要调用方法算出来的,因此不用在实例化对象的时候传递salary这个参数
    public Person(String name, int workingHours, double hourlyWage) {
        this.name = name;
        this.workingHours = workingHours;
        this.hourlyWage = hourlyWage;
        setSalary(workingHours,hourlyWage);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }
    //计算薪水
    public void setSalary(int workingHours,double hourlyWage) {
        //只有超过160小时的工资部分才会有1.5倍薪水
        //超过160小时的那部分工资要多加0.5倍薪水,多加的放前面
        if(workingHours>160){
            this.salary+=(workingHours-160)*hourlyWage*0.5;
        }
        this.salary+=workingHours*hourlyWage;
    }

    public int getWorkingHours() {
        return workingHours;
    }

    public void setWorkingHours(int workingHours) {
        this.workingHours = workingHours;
    }

    public double getHourlyWage() {
        return hourlyWage;
    }

    public void setHourlyWage(double hourlyWage) {
        this.hourlyWage = hourlyWage;
    }

    @Override
    public String toString() {
        return  "名字为: "+name+",工作时长为: "+workingHours+",时薪为: "+hourlyWage+"的员工的薪水为: "+salary;
    }
}

TestPerson
package Work;
public class TestPerson {
    public static void main(String[] args) {
        Person p1=new Person("张三",100,15);
        System.out.println(p1.toString());
        Person p2=new Person("李四",180,15);
        System.out.println(p2.toString());
    }
}

3.3.3 示例代码运行截图

在这里插入图片描述

3.3.4 思路总结

a.找到公式里面的通用性(无论什么情况都可以这么运算)与特殊性(特定条件才能成立)

b.把特殊性放在前面用单if进行判断

c.把通用性放在单if结构的下面

3.4 一个公式搞定两种情况

3.4.1 典型例题

随机生成一个两位数,两位数需要满足的条件如下所示

a 首位不为0

b 首位可以是1-9之间的任意一个数字

c 个位可以是0-9之间的任意一个数字

3.3.2 示例代码
Test
package Work;
import java.util.Random;
public class Test {
    static Random random=new Random();
    public static void main(String[] args) {
        System.out.println("随机生成的二位数为: "+generateRandom());
    }
    public static int generateRandom(){
        int number=0,unit=0,digit=0;
        //number代表的是随机生成的两位数,unit代表个位,digit代表十位
        for (int i = 0; i <2; i++) {
            int temp=random.nextInt(10);
            if(i==0){
               //保证首位不为0,生成的是0就重新生成,这也是数据过滤的一种形式
               while(temp==0){
                   temp=random.nextInt(10);
               }
               digit=temp;
            }else{
                unit=temp;
            }
        }
        number=digit*10+unit;
        return number;
    }
}

3.3.3 示例代码运行截图

在这里插入图片描述

3.3.4 思路总结

a 把公式的首次执行放在第一行

b. if判断是否是特殊情况,若是则进入一个循环,结束循环的条件是公式得到的数

符合特殊情况的要求;进入循环的条件是得到的数不符合的条件;若不是则正常调用公式计算即可。
注意:当用公式生成的数不符合条件时,就会进入循环.直到生成符合条件的时候,条件判断不成立,那就可以跳出while循环了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【资源说明】 Java开发基于知识图谱的航天数据可视化系统源码+项目使用说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 基于知识图谱的航天数据可视化系统,采用多元化的数据展示方式,对数据进行分析处理后展示。 该项目是参加全国计算机设计大赛的作品,很遗憾没能够杀出重围,但是通过这个项目我学习到了关于数据可视化和知识图谱方面的知识 ## 应用背景 当今航天科普网站存在以下问题: * **科技新闻高深难理解** * **数据表现形式单调,视觉冲击感不够** * **方式单一难以激发热情** * **体会感悟不够深刻强烈** 项目背景意义: * **一个理念:**让航天知识深入人心, 感受到祖国航天事业的强大 * **两个观念:**标新立异出类拔萃、信息可靠数据准确 * **五个实现:**知识图谱、你问我答、慧眼世界、慧眼中国、心里有数 知识图谱的构建 1. 利用**webMagic**爬虫框架结合定时任务动态爬取数据并且存储到 **.csv** 后缀的文件中。 2. 从文件中读取数据进行清洗过滤,采用面向对象的思想,建立起核心三元组的概念(实体、属性、关系)。 3. 运用**ORM**框架实现实体对象到**图像数据库Neo4j**的映射,进行数据持久化存储。 知识测试系统构建 1. 航天问题库爬取; 2. 航天问题随机展示; 3. 用户回答问题并提交; 4. 服务器统计热点问题; 5. 答案判别回复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值