1.Scanner类
💡 Scanner类属于引用数据类型 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式。
数据类型 变量名 = new 数据类型();
//每种引用数据类型都有其功能
Scanner类可以完成用户键盘录入,获取到录入的数据。
//Scanner使用步骤:
//1.导包
import java.util.Scanner;
//2.创建对象实例
Scanner sc = new Scanner(System.in);
//用来接收控制台录入的数字
int i = sc.nextInt();
//用来接收控制台录入的字符串
String s = sc.next();
public static void main(String[] args) {
//Scanner 键盘录入
Scanner input = new Scanner(System.in);
System.out.println("请输入想要加密的数字:");
//通过input获取到键盘录入的数值并且赋值给num
int num = input.nextInt();
//加密运算赋值给jg
int jg = (num*10)/2+(int)3.1415926;
//输出结果
System.out.println("加密的结果" + jg);
//取消警号 关闭键盘录入的内存
input.close();
}
2.Random随机数类
💡 用来产生随机数的类Random,它也属于引用数据类型。 这个Random类,它可以产生多种数据类型的随机数,在这里主要介绍生成整数与小数的方式。
//Scanner使用步骤:
//1.导包
java.util.Random
//2.创建对象实例
Random 变量名 = new Random();
public static void main(String[] args) {
// 创建Random类的实例
Random r = new Random();
// 得到0-100范围内的随机整数,将产生的随机整数赋值给i变量
int i = r.nextInt(100);
// 得到0-10范围内的随机整数,将产生的随机整数赋值给i1变量
int i1 = r.nextInt(10);
//得到0.0-1.0范围内的随机小数,将产生的随机小数赋值给d变量
double d = r.nextDouble();
System.out.println(i);
System.out.println(i1);
System.out.println(d);
}
3.流程控制语句
1.选择结构if
💡 if语句是指如果满足某种条件,就进行某种处理。
if (条件语句){
执行语句;
……
}
注意
- 判断结果为boolean 要么为true 要么为false
//当条件满足的情况下 奖励MP4
if(score >= 90){
System.out.println("奖励一个MP4!");
}
1.1if…else语句
💡if…else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理。
if (判断条件){
执行语句1
……
}else{
执行语句2
……
}
Scanner scanner = new Scanner(System.in);
int alcohol = scanner.nextInt();
if (alcohol >= 20){
System.out.println("被警察叔叔带走了...");
} else {
System.out.println("继续开车...");
}
1.2if…else if….else语句
// 银行卡
int money = 4;
// 判断
if (money >= 500) {
System.out.println("买高铁");
}else if(money >= 200){
System.out.println("买飞机");
}else if (money >= 100) {
System.out.println("买坦克");
}else if (money >= 50) {
System.out.println("买核弹");
}else if (money >= 20) {
System.out.println("买房子");
}else if (money >= 5){
System.out.println("买AK");
}else {
System.out.println("回家做梦");
}
1.3嵌套IF
// 键盘录入 分别是 时间和男子女子
Scanner input = new Scanner(System.in);
//获取成绩
System.out.println("请输入比赛成绩:");
double score = input.nextDouble();
//获取性别
System.out.println("请输入性别:");
String gender = input.next();
// 判断成绩是否小于10秒
if (score <= 10) {
//判断性别
if (gender.equals("男")) {
System.out.println("去男子组");
}else if(gender.equals("女")){
System.out.println("去女子组");
}else {
System.out.println("请重新输入。。。。。");
}
}else {
System.out.println("成绩不合格");
}
2.switch语句
💡switch 选择结构可以更好的解决等值判断问题
switch (表达式) {
case 常量1:
break;
case 常量3:
break;
default:
break;
int num = 2;
switch (num) {
case 1:
System.out.println("麻省理工学院");
break;
case 2:
System.out.println("笔记本");
break;
case 3:
System.out.println("奖励移动硬盘");
break;
default:
System.out.println("请从新输入前几名");
break;
1.穿透
💡在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式。
int num = 2;
switch (num) {
case 1:
case 3:
case 5:
System.out.println("奇数!");
break;
case 2:
case 4:
case 6:
System.out.println("偶数!");
break;
default:
System.out.println("请从新输入");
break;
switch 和 if 的比较
- 如果判断的具体数值不多, 而且符合 byte、 short 、 int、 char, enum[枚举], String 这 6 种类型。 虽然两个语句都可 以使用, 建议使用 swtich 语句。
- 其他情况: 对区间判断, 对结果为 boolean 类型判断, 使用 if, if 的使用范围更广 。
注意:
- “表达式” 的取值类型:char 、byte、short、int、string 类型等数据,并且它必须用括号括住。
- JDK5版本以后可以是枚举
- JDK7版本以后可以是字符串
- “case:” 后面跟的是是要和表达式进行比较的值
- “break” 表示一个case的中断,不能省略,但最后一个break可以省略
- “default” 当所有值和表达式都不匹配的时候就执行 default 控制的语句体,默认情况总是出现在switch 语句块的最后。
- 若表达式是String类型,case后面的值要用双引号” “;
- 若表达式是char类型,case后面的值用单引号’ ‘。
3.循环结构
1.While
根据条件判断来决定是否执行大括号内的执行语句。 只要循环条件成立就会不断执行循环操作,大括号内的执行语句就会执行,直到条件不成立,while循环结束。
while(循环条件){
循环操作
………
}
在大括号中的执行语句被称作循环体,循环体是否执行取决于循环条件。
//起始从1开始
int i = 1;
while(i <= 100){
System.out.println("第" + i + "次打王飞");
//循环一次加1
i++;
//直到加100次为止 并且大于100不在进入循环
}
2.do….while
关键字do,大括号中是循环体, do…while循环语句将循环条件放在了循环体的后面。 循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
do {
循环体
………
} while(循环条件);
String answer;
Scanner input = new Scanner(System.in);
do {
System.out.println("上机编写程序!");
System.out.println("合格了么?(y/n)");
answer = input.next();
} while (!"y".equals(answer));
System.out.println("及格了");
区别
- 循环结构的表达式不同
- 执行时判断方式不同
- 执行次数不同
- 执行末尾循环体的顺序不同
- while 先判断在执行
- do..while 先执行在判断
1.死循环
while(true){
循环操作
………
}
do {
循环体
………
} while(true);
缺乏条件的判断,当条件为true的时候会一直执行循环体
3.For
反复执行一段代码,指导满足一定的条件为止
for(初始化表达式; 循环条件; 操作表达式){
执行语句
………
}
1.初始部分:设置循环的初始状态
2.循环体:重复执行的代码
3.迭代:下一次循环开始前要执行的部分
4.循环条件:判断是否继续循环的条件
注意:
for关键字后面()中包括了三部分内容:初始化表达式、循环条件和操作表达式,它们之间用“;”分隔,{}中的执行语句为循环体。
执行流程
1.表示初始化表达式、2.表示循环条件、3.表示操作表达式、4.表示循环体,通过序号来具体分析for循环的执行流程。
for(初始化表达式; 循环条件; 操作表达式){
执行语句
………
}
顺序
1.执行初始化部分(int i = 0)
2.进入循环条件判断(i<100;)
3.根据循环条件判断结果(true,false)执行循环体
4.执行迭代部分 改变循环变量值(i++)
5.依次重复执行
6.退出循环
错误代码
for(;; ){
执行语句
}
for(;i<10; ){
执行语句
}
for(;;i++ ){
执行语句
}
for(;i<10;i++ ){
执行语句
}
4.跳转语句(break、continue)
break语句
用于终止某个循环,程序跳转到循环体外的下一条语句。
int score ; //每门课的成绩
int sum = 0 ; //成绩之和
double avg = 0.0; //平均分
boolean isR = true;
Scanner input = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = input.next();
for (int i = 0; i < 5; i++) {
System.out.println("请输入5门课程中第" + (i+1) + "门课的成绩");
//循环录入每次课的成绩
score = input.nextInt();
if (score < 0 ) {
isR = false;
break;
}
//进行求和
sum = sum + score;
}
if (isR) {
avg = sum /5 ;
System.out.println(name+ " 的平均分是 : " + avg);
}else {
System.out.println("输入错误,请从新输入。。。。。。");
}
continue
用于跳出本次循环,进入下一次循环
int score ; //每门课的成绩
int sum = 0 ; //大于80的人数
int num ; //总人数
Scanner input = new Scanner(System.in);
System.out.println("请输入班级总人数:");
num = input.nextInt();
for (int i = 0; i < num; i++) {
System.out.println("请输入第" + (i+1) + "名的成绩:");
//循环录入每次课的成绩
score = input.nextInt();
if (score < 80) {
continue;
}
// if (score >= 80) {
// sum++;
// }
sum++;
}
System.out.println("80分以上的学生人数是:"+sum);
double rate = (double)sum / num *100;
System.out.println(rate+"%");
}
4.双重循环
💡循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构
System.out.println("打印直角三角形");
//打印行数
for(int i = 1 ; i <= 5 ; i++){
//打印行内个数
for (int j = 0; j < 2*i-1; j++) {
System.out.print("*");
}
System.out.println("");
}
int rows = 9; //乘法表的行数
for(int i = 1; i<=rows; i++){ //一共9行
for(int j = 1; j <= i; j++){ //第i行有i个式子
System.out.print(j+"*"+i+"="+j*i+" ");
}
System.out.print("\n"); //打印完一行后换行
}