综合练习
案例买飞机票
public static void main(String[] args) {
//代码可以简化 抽取公共代码成方法
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份:");
int month = sc.nextInt();
System.out.println("请输入机票原价:");
int ticket = sc.nextInt();
System.out.println("请输入舱型,0头等舱,1经济舱");
int seat = sc.nextInt();
if(month >= 5 && month <=10){
if(seat == 0){
ticket = (int)(ticket * 0.9);
}else if(seat == 1){
ticket = (int)(ticket * 0.85);
} else {
System.out.println("没有这个舱位");
}
}else if((month>=1&&month<=4)||((month>=11 && month<=12))){
if(seat == 0){
ticket = (int)(ticket * 0.7);
}else if(seat == 1){
ticket = (int)(ticket * 0.65);
} else {
System.out.println("没有这个舱位");
}
}
System.out.println(ticket);
}
抽取方法简化后:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份:");
int month = sc.nextInt();
System.out.println("请输入机票原价:");
int ticket = sc.nextInt();
System.out.println("请输入舱型,0头等舱,1经济舱");
int seat = sc.nextInt();
if(month >= 5 && month <=10){
ticket = getTicket(ticket, seat, 0.9, 0.85);
}else if((month>=1&&month<=4)||((month>=11 && month<=12))){
ticket = getTicket(ticket, seat, 0.7, 0.65);
}
System.out.println(ticket);
}
private static int getTicket(int ticket, int seat, double v, double v2) {
if (seat == 0) {
ticket = (int) (ticket * v);
} else if (seat == 1) {
ticket = (int) (ticket * v2);
} else {
System.out.println("没有这个舱位");
}
return ticket;
}
抽取代码为方法 可以利用idea自带的快捷键方式:ctrl+alt+M自动抽取代码
案例找质数
public static void main(String[] args) {
int count = 0;
for (int i = 101; i < 200; i++) {
boolean flag = true;
for (int j = 2; j < i; j++) {
if(i % j == 0){
flag = false;
break;
}
}
if(flag){
count++;
System.out.println( i+"是质数");
}
}
System.out.println("一共有" + count + "个质数");
}
案例开发验证码
public static void main(String[] args) {
//数组中存大小写字母 然后从中抽取四个字母
char[] chs = new char[52];
for (int i = 0; i < chs.length; i++) {
//运用ASCII码表知识
if (i <= 25) {
//添加小写字母 a对应的ASCII码为97
chs[i] = (char) (97 + i);
} else {
//添加大写字母 A对应65
chs[i] = (char) (65 + i - 26);
}
}
String res = "";
//随机抽取四个字母
Random r = new Random();
for (int i = 0; i < 4; i++) {
int randomIndex = r.nextInt(chs.length);
res += chs[randomIndex];
}
int num = r.nextInt(10);
res += num;
System.out.println(res);
}
案例评委打分
crtl+f6一次性改变量名
import java.util.Arrays;
import java.util.Scanner;
public class tses04 {
public static void main(String[] args) {
int[] scores = getScores();
int sum = getSum(scores);
int avg = (sum - getMax(scores) - getMin(scores)) / (scores.length - 2);
System.out.println("总分" + sum);
System.out.println("最高分" + getMax(scores));
System.out.println("最低分" + getMin(scores));
System.out.println("去除最高分最低分后平均分" + avg);
}
public static int[] getScores() {
int[] scores = new int[6];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < scores.length; ) {
System.out.println("请输入分数:");
int score = sc.nextInt();
if (score>= 0 && score <= 100) {
scores[i] = score;
i++;//放这里是因为如果输入的不符合规则的话,那就让i一直处于原值,符合规则才让他++
} else {
System.out.println("分数错误,请重新输入:");
}
}
return scores;
}
public static int getSum(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum = sum + arr[i];
}
return sum;
}
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
public static int getMin(int[] arr) {
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}
}
案例数字加密
public class test05 {
public static void main(String[] args) {
int[] arr = getArr(1983);
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 5;
}
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] % 10;
}
for (int i = 0,j = arr.length-1; i < j; i++,j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// for (int i = 0; i < arr.length; i++) {
// System.out.print(arr[i] + " ");
// }
int num = 0;
for (int i = 0; i < arr.length; i++) {
num = num*10 + arr[i];
}
System.out.println(num);
}
public static int[] getArr(int number) {
int temp = number;
int count = 0;
while(number != 0){
number = number /10;
count++;
}
int[] arr = new int[count];
int index = arr.length -1;
while(temp!=0){
int ge = temp % 10;
temp = temp / 10;
arr[index] = ge;
index --;
}
return arr;
}
}
案例抽奖
优化后
package Tests;
import java.util.Random;
public class test06 {
public static void main(String[] args) {
//打乱顺序
int[] arr = {588,2,888,123,1000};
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
//获取随机索引
int randomIndex = r.nextInt(arr.length);
//拿着i和随机索引上的值交换
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
面向对象
类:是共同特征的描述
对象:是真实存在的实例
定义类的补充注意事项:
1、用来描述一类事务的类,专业叫做javabean类,在这个类中是不写main方法的。
2、在以前编写main方法的类叫做测试类,可以在测试类中创建javabean类的对象并进行赋值调用。
3、类名首字母建议大写,英文 有意义,满足驼峰模式,不能用关键字,要满足标志符规定。
4、一个代码文件中可以定义多个类,但是只能一个类是public修饰的,public修饰的类名必须是java代码的文件名称。
面向对象的三大特征:封装 继承 多态
封装:
对象代表什么,就得封装对应的数据,并提供数据对应的行为。
就近原则:
System.out.println(age);//就近原则先找局部变量 找不到再找成员变量
System.out.println(this.age);//直接找成员变量
this的作用:可以区分成员变量和局部变量。
构造方法:
1、构造方法的作用:创造对象的时候,由虚拟机自动调用,给成员变量进行初始化的。(“构造方法的作用就是用来创建对象的”这句话是错的)
2、构造方法的种类及作用
无参构造方法:初始化对象时,成员变量的数据均采用默认值。
有参数构造方法:在初始化对象的时候,同时可以为对象赋值。
3、构造方法的注意事项:
任意类定义出来,默认就带了无参构造器,写不写都有。
一旦有了有参构造器,就没有无参数构造器了,此时就要自己写无参构造器了。
建议任何时候都写上空参和带全部参数的构造方法。
4、构造方法的格式:
方法名和类名相同,大小写也要一致。
没有返回值类型,连void都没有。
没有具体的返回值(不能由return带回结果数据)
自动生成javabean构造方法快捷键:alt+insert或者alt+Fn+insert或者利用PTG插件生成标准javabean.
this的内存原理:
this的本质:代表方法调用者的地址值
成员变量和局部变量