Java阶段一Day07
文章目录
培养编程思维能力
几个小案例
猜数字
package com.liner;
import java.util.Random;
import java.util.Scanner;
public class Guessing {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random rand = new Random();
System.out.println("欢迎来到猜一猜");
System.out.println("系统随机数字中...");
int random = rand.nextInt(100);
/* do {
System.out.print("请输入所猜数字:");
int num = scanner.nextInt();
if (num == random) {
System.out.println("恭喜你猜对了");
break;
} else if (num > random) {
System.out.println("猜大了");
} else {
System.out.println("猜小了");
}
} while (true);
*/
int count = 10;
while(true){
System.out.print("请输入所猜数字(您只有10次机会):");
int num = scanner.nextInt();
if (num == random) {
System.out.println("恭喜你猜对了");
count--;
System.out.println("本次作答使用机会" + (10-count) + "次");
break;
} else if (num > random) {
System.out.println("猜大了");
count--;
System.out.println("还剩"+ count + "次机会");
} else {
System.out.println("猜小了");
count--;
System.out.println("还剩"+ count + "次机会");
}
if (count == 0) {
System.out.println("机会用尽,请下次再来");
break;
}
}
}
}
验证码
package com.liner;
import java.util.Random;
import java.util.Scanner;
public class VerificationCode {
public static void main(String[] args) {
/*
* 随机生成 N位 验证码 包含 大写字母、小写字母、数字
*
*/
Scanner scanner = new Scanner(System.in);
System.out.print("请输入生成验证码位数:");
int num = scanner.nextInt();
String code = verCode(num);
System.out.println(code);
System.out.print("请输入验证码:");
String verCode = scanner.next();
if (verCode.equalsIgnoreCase(code)) {
System.out.println("验证码正确");
}else {
System.out.println("验证码错误");
}
/* System.out.print("请输入验证码:");
String code1 = generateVeriCode(num);
System.out.println(code1);*/
}
/**
* 生成 N位 验证码
*
* @param len
* @return
*/
public static String verCode(int len) {
String code = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrlstuvwxyz";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
int index = (int) (Math.random() * code.length());
sb.append(code.charAt(index));
}
return sb.toString();
}
/**
* 验证码 可选范围
*
* @param len
* @return
*/
public static String generateVeriCode(int len) {
Random random = new Random();
String code = "";
char[] chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
//验证码字符可选范围
for (int i = 0; i < len; i++) {
int index = random.nextInt(chars.length); //0到61
code += chars[index];
}
return code;
}
}
素数
package com.liner;
import java.util.Scanner;
public class PrimeNumber {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/*
* 找到 2 到 100 内的所有 素数
* 除 1 和 本身 外,不能被其他任何自然数整除
* */
System.out.println("输出2~100之间的素数:");
for (int i = 2; i <=100 ; i++) {
boolean flag = true;
prime(i, flag);
}
System.out.print("\n请输入一个数判断是否为质数:");
int num = scanner.nextInt();
for (int i = 2; i < num; i++) {
if (num % i == 0) {
System.out.println(num + "不是质数 ");
break;
}
}
}
/**
* 判断质数
*/
private static void prime(int num, boolean flag) {
for (int i = 2; i <= num/2; i++) {
if (num % i == 0) {
flag = false;
break;
}
}
if (flag) {
System.out.print(num + "\t");
}
}
}
打折
package com.liner;
import java.util.Scanner;
public class CalAirPrice {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/*
* 机票价格 按照 淡季、旺季 舱位收费 : 头等舱、商务舱、经济舱
* 输入 机票原价、月份、舱位 实现不同的折扣
* 旺季:5~10 头等舱:9折 商务舱:8.5折 经济舱:8折
* 淡季 11~4 头等舱:7折 商务舱:6.5折 经济舱:6折
*
* */
System.out.println("欢迎使用东方航空订票系统:");
System.out.print("请输入机票原价:");
if (scanner.hasNextInt()) {
int price = scanner.nextInt();
System.out.print("请输入当前月份:");
int month = scanner.nextInt();
System.out.print("请输入预选舱位:(1.头等舱、2.商务舱、3.经济舱)");
int type = scanner.nextInt();
double finalPrice = calFinalPrice(price, month, type);
if (finalPrice != -1) {
System.out.println("订票成功,所花费" + finalPrice + "元");
}
} else {
System.out.println("请输入正确字符");
}
}
private static double calFinalPrice(double price, int month, int type) {
double finalPrice;
if (price < 0) {
System.out.println("请输入正确价格");
return -1;
}
if (month < 1 || month > 12) {
System.out.println("请输入正确月份");
return -1;
}
if (type < 1 || type > 3) {
System.out.println("请输入正确舱位");
return -1;
}
if (month >= 5 && month <= 10) {
//旺季
switch (type) {
case 1:
finalPrice = price * 0.9;
break;
case 2:
finalPrice = price * 0.85;
break;
default:
finalPrice = price * 0.8;
}
} else {
//淡季
switch (type) {
case 1:
finalPrice = price * 0.7;
break;
case 2:
finalPrice = price * 0.65;
break;
default:
finalPrice = price * 0.6;
}
}
return finalPrice;
}
}
总分、平均分
package com.liner;
import java.util.Arrays;
import java.util.Scanner;
public class CalTotalAvg {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
/*
* 《主持人大赛》 有6名评委给选手打分
* 分数范围 0~100
* 选手最高得分为: 去掉最高分,去掉最低分 求剩余平均分
*/
System.out.print("请输入本场有几位评委:");
int count = scanner.nextInt();
double[] scores = inputData(count);
double avg = calAvg(scores);
System.out.println("本场平均分为:" + avg);
}
/**
* 控制台输出评委打分
*/
public static double[] inputData(int count) {
double[] scores = new double[count];
for (int i = 0; i < count; i++) {
System.out.print("第" + (i + 1) + "位评委的打分为:");
scores[i] = scanner.nextDouble();
if (scores[i] < 0 || scores[i] > 100) {
System.out.println("请输入0~100区间的分数");
break;
}
}
return scores;
}
/**
* 算出平均分
*/
public static double calAvg(double[] scores) {
double sum = calTotal(scores);
//算出平均分
return sum / (scores.length - 2);
}
/**
* 算出总分
*/
private static double calTotal(double[] scores) {
double sum = 0;
//数组升序排序
Arrays.sort(scores);
//取出去掉一个最高分去掉一个最低分
for (int i = 1; i < scores.length - 1; i++) {
sum += scores[i];
}
return sum;
}
}
总结咨询 ————如何有效学习Java
Java基础必备知识点
- 变量、基本数据类型、运算符
- 程序结构:顺序、分支、循环
- 基本类型数组、方法
学习方法介绍
- 课上认真听讲、切记一边听课一边敲代码,不专心
- 让练习时使劲练,越多越好
- 在课上尽量多的吸收知识,晚上应该是复习和强化,不是从头开始学
- 晚上作业最低两遍,没有最好,只有更好
- 先模仿,再创造,先消化,再扩展
- 不要总想看回放,注意效率
- 学习循序渐进,温故知新
遇到问题高效解决方法
- 寻求同桌、同学帮助
- 找项目经理
- 百度等网络资源
教师总结
回顾:
-
数组的复制:
1)System.arraycopy(a,1,b,0,4); 2)int[] b = Arrays.copyOf(a,6); a = Arrays.copyOf(a,a.length+1);
-
方法:
- 封装一段特定的业务逻辑功能、只干一件事、反复多次调用、减少重复、有利于维护
- 何时用:只要是一个独立的业务功能,就要把它封装到一个方法中
-
方法的定义:
修饰词 返回值类型 方法名(参数列表){ 方法体----具体的业务逻辑功能实现 }
-
方法的调用:
-
无返回值:方法名(有参传参);
-
有返回值:数据类型 变量 = 方法名(有参传参); //-------最常规的调用方式
System.out.println( 方法名(有参传参) ); //返回值为基本类型时可以这样调
-
-
return:
- return 值; //1)结束方法的执行 2)返回结果给调用方
- return; //1)结束方法的执行
精华笔记:
- 案例:------培养编程思维能力
笔记:
-
案例:------培养编程思维能力
package day07; import java.util.Scanner; /** * 需求:猜数字小游戏 * 训练目标: while(true)自造死循环+break */ public class Guessing { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = (int)(Math.random()*1000+1); //1到1000 System.out.println(num); //作弊 while(true){ //自造死循环 System.out.println("猜吧!"); int guess = scan.nextInt(); if(guess>num){ System.out.println("猜大了"); }else if(guess<num){ System.out.println("猜小了"); }else{ System.out.println("恭喜你猜对了"); break; //跳出循环 } } } }
package day07; import java.util.Random; /** * 需求:随机生成N位验证码(大写字母、小写字母、数字) */ public class VerificationCode { public static void main(String[] args) { String code = generateVeriCode(6); System.out.println("验证码:" + code); } /** 生成验证码 */ public static String generateVeriCode(int len){ String code = ""; Random rand = new Random(); char[] chs = {'a','b','c','d','e','f','g','h','i','j','k', 'l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z','A','B','C','D','E','F','G', 'H','I','J','K','L','M','N','O','P','Q','R', 'S','T','U','V','W','X','Y','Z','0','1','2', '3','4','5','6','7','8','9'}; //验证码字符可选范围 for(int i=1;i<=len;i++) { //len次 int index = rand.nextInt(chs.length); //随机下标(0到61) code += chs[index]; //根据随机下标获取对应字符并拼接到code中 } /* code="" i=1 index=0 code="a" i=2 index=61 code="a9" i=3 index=25 code="a9z" i=4 index=28 code="a9zC" i=5 */ return code; } }
package day07; /** * 需求:--------常见面试题 * 找到2到100之间的所有素数(质数) * 素数:除了1和它本身外,不能被其它任何自然数整除的数----只能被1和它本身整除 * 训练目标:通过boolean的flag打标记 */ public class PrimeNumber { public static void main(String[] args) { //带数(2/3/4/5/6/7/8) for(int num=2;num<=100;num++){ boolean flag = true; //假设每个num都是true for(int i=2;i<=num/2;i++){ if(num%i==0){ flag = false; break; } } if(flag){ System.out.print(num+"\t"); } } /* // 7%2/3/4/5/6,但凡有1个为0的,就能说明它不是素数,只有都不为0的,才是素数 int num = 7; //7,8,9,11 boolean flag = true; //1)假设num是素数 for(int i=2;i<=num/2;i++){ //i=2/3 if(num%i==0){ flag = false; //2)修改num为不是素数 break; } } if(flag){ //3)判断flag标记 System.out.println(num+"是素数"); }else{ System.out.println(num+"不是素数"); } */ } }
package day07; import java.util.Scanner; /** * 需求: * 机票价格按照季节(淡季、旺季)、舱位(头等舱、商务舱、经济舱)收费 * 要求: * 输入机票原价、月份和舱位,实现不同的折扣 * --旺季(5月到10月)时,头等舱9折,商务舱85折,经济舱8折 * --淡季(11月到来年4月)时,头等舱7折,商务舱65折,经济舱6折 */ public class CalAirPrice { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入机票原价:"); double price = scan.nextDouble(); System.out.println("请输入月份:"); int month = scan.nextInt(); System.out.println("请选择舱位: 1.头等舱 2.商务舱 3.经济舱"); int type = scan.nextInt(); double finalPrice = calFinalPrice(price,month,type); if(finalPrice!=-1){ //数据合法 System.out.println("机票的最终价格为:"+finalPrice); } } /** * 根据原价、月份、舱位,计算飞机票的最终价格 */ public static double calFinalPrice(double price,int month,int type){ double finalPrice = 0.0; //最终价格 //只要数据输入错误,都统一返回-1 if(price<0){ System.out.println("机票原价输入错误"); return -1; } if(month<1 || month>12){ System.out.println("月份输入错误"); return -1; } if(type<1 || type>3){ System.out.println("舱位输入错误"); return -1; } //程序能走到这,说明数据一定是合法的 if(month>=5 && month<=10){ //旺季 switch(type){ //根据舱位类型做不同折扣 case 1: finalPrice = price*0.9; break; case 2: finalPrice = price*0.85; break; case 3: finalPrice = price*0.8; break; } }else{ //淡季 switch(type){ //根据舱位类型做不同折扣 case 1: finalPrice = price*0.7; break; case 2: finalPrice = price*0.65; break; case 3: finalPrice = price*0.6; break; } } return finalPrice; } }
package day07; /** * 需求: * 《主持人大赛》有N名评委给选手打分,要求分数范围为0到100之间的浮点数 * 选手的最终得分为: 去掉最高分和最低分后的N-2个评委的平均分 * 训练目标: 方法的设计 */ public class CalTotalAvg { public static void main(String[] args) { double[] scores = inputData(6); //1)录入评委的评分 double avg = calAvg(scores); //2)计算平均分 System.out.println("平均分为:"+avg); } /** * 录入评委的评分 */ public static double[] inputData(int count){ Scanner scan = new Scanner(System.in); double[] scores = new double[count]; //评分数组 for(int i=0;i<scores.length;i++){ System.out.println("请输入第"+(i+1)+"个评委的分数:"); scores[i] = scan.nextDouble(); } return scores; } /** * 计算平均分 */ public static double calAvg(double[] scores){ double total = calTotal(scores); //获取去掉最高分和最低分之后的总分 double avg = total/(scores.length-2); //平均分 return avg; } /** * 计算去掉最高分和最低分后的总分 */ public static double calTotal(double[] scores){ double total = 0.0; double max = scores[0]; //假设第1个元素为最大值 double min = scores[0]; //假设第2个元素为最小值 for(int i=0;i<scores.length;i++){ if(scores[i]>max){ //找最大值 max = scores[i]; } if(scores[i]<min){ //找最小值 min = scores[i]; } total += scores[i]; //计算总分 } return total-max-min; //返回去掉最高分和最低分之后的总分 } }
补充:
-
方法的签名:方法名+参数列表
-
明日单词:
1)Student:学生 2)className:班级名称 3)stuId:学号 4)study:学习 5)play:玩 6)another:另一个 7)Car:小汽车 8)brand:品牌 9)color:颜色 10)price:价格 11)start:开始、启动 12)run:跑 13)stop:停止