文章目录
数据输入
基本步骤
//①导包,代码出现位置必须在类定义之上。
import java.util.Scanner;
public class Demo1{
public static void main(String[] args){
//②创建对象,只有sc是变量名可以变,其他都不可以变;
Scanner sc = new Scanner(System.in);
//③接收数据,只有x是变量名可以变,其他的都不允许变;
int x = sc.nextInt();
//输出数据
System.out.println("x:"+x);
}
}
案例:
// 键盘输入三个数,找最大值。
import java.util.Scanner;//导包
public class Deno1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);//创建对象
int height1 = sc.nextInt();//接收数据
int height2 = sc.nextInt();
int height3 = sc.nextInt();
int max = height1>(height2>height3?height2:height3)?height1:(height2>height3?height2:height3);
System.out.println("max:" + max);
}
}
备注
2022/6/25 |
---|
Scanner(InputStream source) 构造一个新的Scanner,产生从指定的输入流扫描的值 |
boolean nextInt() 将输入的下一个标记扫描为int |
流程控制语句
分类:顺序结构、分支结构(if、switch)、循环结构(for、while、do…while)
顺序结构
介绍:是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行;程序中大多数的代码都是这样执行的。
分支结构
if语句
- if语句格式1
if(关系表达式){//①计算关系表达式的值
语句体;//②表达式值为true,执行语句体;否则不执行
}//③继续执行后面的语句内容
- if语句格式2
if(关系表达式){//①计算关系表达式的值
语句体1;//②表达式的值为true,执行语句体1
}else{
语句体2;//③表达式的值为false,执行语句体2
}//④继续执行后面的语句内容
- if语句格式3
if(关系表达式1){//①计算关系表达式1的值
语句体1;//②计算的值为true,执行语句体1;为false,计算关系表达式2的值
}else if(关系表达式2){
语句体2;//③计算的值true,执行语句体2
}
....
else{//n如果没有任何表达式的值为true,执行语句体n+1
语句体n+1;
}
案例 if格式2:
需求:输入一个数,判断是奇数还是偶数,控制台输出该整数是奇数还是偶数
import java.util.Scanner;
public class Deno1{
public static void main(String[] args){
System.out.println("请输入x的值:");
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
if (x % 2 == 0){
System.out.println(x + "是偶数");
}else{
System.out.println(x + "是奇数");
}
}
}
案例 if格式3:
需求:输入一个数字(1-7),输出对应的星期
import java.util.Scanner;
public class Deno1{
public static void main(String[] args){
System.out.println("请输入1-7之间的一个数");
Scanner sc = new Scanner(System.in);
int week = sc.nextInt();
if (week == 1){
System.out.println(week + "是星期一");
}else if(week == 2){
System.out.println(week + "是星期二");
}else if(week == 3){
System.out.println(week + "是星期三");
}else if(week == 4){
System.out.println(week + "是星期四");
}else if(week == 5){
System.out.println(week + "是星期五");
}else if(week == 6){
System.out.println(week + "是星期六");
}else{
System.out.println(week + "是星期日");
}
}
}
案例 考试奖励:
数据测试:正确数据、边界数据、错误数据。都进行测试后,程序仍可以很好的运行,说明程序是健壮的。
//考试奖励:根据不同的分数得到不同的礼物。
import java.util.Scanner;
public class Deno1{
public static void main(String[] args){
System.out.println("请输入成绩:");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if (score > 100 || score < 0){
System.out.println("输入数据不合理");
}else{
if (score>= 90 && score <= 100){
System.out.println("奖品1");
}else if(score >= 80 && score < 90){
System.out.println("奖品2");
}else if(score >= 70 && score < 80){
System.out.println("奖品2");
}else{
System.out.println("没有奖品");
}
}
}
}
switch语句
格式:
switch(表达式){
* 格式说明:表达式取值可以为byte、short、char、int,JDK5以后可以是枚举,JDK7以后可以是String。
case 值1:
* case后面跟着的值要和表达式的值进行比较。则case后的值也可以是byte、short、char、int
语句体1;
break;//break表示中断、结束的意思,用来结束switch语句。
case 值2:
语句体2;
break;
....//执行流程:①计算表达式的值②依次将表达式的值与case后的值进行比较,对应的值执行对应的语句③都不匹配的话,执行default里的语句体。
default://表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
语句体n+1;
[break;]
}
//在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break或者整体switch语句的结束为止。
备注
2022/6/25 |
---|
switch的表达式必须是 枚举类型或整数表达式。 |
case穿透
在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break或者整体switch语句的结束为止。
案例:输入月份,输出对应的季节
方法一,普通方法
import java.util.Scanner;
public class Deno1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
System.out.println("请输入1-12之间的数,用于表示月份:");
switch (number){//一般方法。
case 3 :
System.out.println("春季");
break;
case 4 :
System.out.println("春季");
break;
case 5 :
System.out.println("春季");
break;//当忘记写此处break的时候,输入5,会输出春季和夏季两个词。这种现象称为case穿透
case 6:
System.out.println("夏季");
break;
case 7:
System.out.println("夏季");
break;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
case 12:
System.out.println("冬季");
break;
case 1:
System.out.println("冬季");
break;
case 2:
System.out.println("冬季");
break;
default:
System.out.println("输入的月份有误");
//最后如果前者都不匹配的话,执行default中语句体的时候,可以不用写break。
}
}
}
方法二:case穿透
import java.util.Scanner;
public class Deno1{
public static void main(String[] args){
System.out.println("请输入1-12之间的数,用于表示月份:");
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
switch (number){//一般方法。
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System.out.println("输入的月份有误");
//最后如果前者都不匹配的话,执行default中语句体的时候,可以不用写break。
}
}
}
循环语句
特征:
①重复做某件事情②具有明确的开始和停止的标志
组成与语法:
- 初始化语句
用于表示循环开启时的起始状态(循环开始的时候什么样)
可以是一条或多条语句,这些语句可以完成一些初始化操作 - 条件判断语句
用于表示循环反复执行的条件(判断循环是否能一直执行下去)
使用一个结果值为boolean类型的表达式,能决定是否执行循环体。例如:a<3 - 循环体语句
用于表示循环反复执行的内容(循环反复执行的事情)
任意语句,将被反复执行 - 条件控制语句
用于表示循环执行中每次变化的内容(控制循环是否能执行下去)
使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果。常见i++、i–
for语句
格式:
for (初始化语句;条件判断语句;条件控制语句){//执行过程:①执行初始化语句;
//②执行条件判断语句,结果为false循环结束,true继续执行;④执行条件控制语句
循环体语句;//③执行循环体语句
}//⑤回到②继续
循环执行过程:
循环执行流程为:
初始化语句》条件判断语句》true循环体》条件控制语句》
条件判断语句》true循环体》条件控制语句》
......
条件判断语句》false》其他语句
案例:
在控制台输出1-5和5-1的数据。
public class Deno1{
public static void main(String[] args){
//main方法定义的时候,如果不写String[] args会报错。编译javac可以通过,但是运行java报错。
int i;
for(i = 1;i < 6;i++){
System.out.println(i);
}
System.out.println("-----------");
for(i = 5;i>0;i--){
System.out.println(i);
}
}
}
案例:求1-5之间的数据和,并把结果输出。
public class Deno1{
public static void main(String[] args){
int sum = 0;
for(int i =1;i<=5;i++){
sum += i;
}
System.out.println("1-5之间数据的和sum = " + sum);
}
}
案例:求1-100之间的偶数和,并把求和结果在控制台输出。
public class Deno1{
public static void main(String[] args){
int sum = 0;
for(int i = 1;i<=100;i++){
if(i % 2 == 0){
sum += i;
}
}
System.out.println("1-100之间偶数之和sum=" + sum);
}
}
案例:水仙花数输出
(水仙花数)①是一个三位数 ②水仙花数的个位、十位、百位的数字立方和等于原数。
注意:任意数字的指定位上的数值如何求
先使用整除操作将要求的数字移动到个位上,再使用取余操作取出最后一位上的值。
public class Deno1{
public static void main(String[] args){
int a = 0;
int b = 0;
int c = 0;
for(int i = 100;i < 1000;i++){
a = i / 100;
b = i % 100 / 10;
c = i % 10;
if (i == (a*a*a + b*b*b + c*c*c)){
System.out.println(i + "是水仙花数");
}
}
}
}
案例:统计,水仙花数的数量
public class Deno1{
public static void main(String[] args){
int a = 0;//百位
int b = 0;//十位
int c = 0;//个位
int sum = 0;//水仙花数数量
for(int i = 100;i<1000;i++){
a = i /100;
b = i /10 % 10;
c = i % 10;
if(i == (a*a*a + b*b*b + c*c*c)){
sum += 1;
}
}
System.out.println("水仙花数="+sum);
}
}
while循环
执行流程:
初始化语句》条件判断语句》true-循环体语句》条件控制语句》
条件判断语句》false》其他语句
基本格式:
while (条件判断语句){
循环体语句;
条件控制语句;
}
完整语句:
初始化语句;//执行流程:①执行初始化语句。
while(条件判断语句){//②执行条件判断语句,false循环结束
循环体语句;//true执行循环体
条件控制语句;//③执行条件控制语句,返回②
}
案例:用while实现五次“你要自律生活”的输出
public class Deno1{
public static void main(String[] args){
int i = 5;
while(i>0){
System.out.println("你要自律生活");
i--;
}
}
}
案例:一张足够大的纸,它的厚度是0.1毫米,折叠多少次可以折成珠穆朗玛峰的高度(8844430毫米)
public class Deno1{
public static void main(String[] args){
double paper = 0.1;
int count =0;
int zf = 8844430;
while (paper <= zf){
paper *= 2;
count++;
}
System.out.println("纸张需要折叠" + count + "次,才可以达到珠穆朗玛峰高度。");
}
}
do…while语句
执行流程:
初始化语句》循环体语句》条件控制语句》条件判断语句》
true》循环体语句》条件控制语句》条件判断语句》
......
false》其他语句
基本格式:
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
完整格式:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
案例:使用do…while实现五次“你的一切都将依靠你自己”
public class Deno1{
public static void main(String[] args){
int i = 0;
do{
System.out.println("你的一切都将依靠你自己");
i++;
}while(i<5);
}
}
三种循环结构的区别
三种循环的区别:
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行);
- do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断);
for和while的区别(条件控制语句所控制的自增变量):
- 对于for循环来说,自增变量归属于其语法结构中,在for循环结束之后就不能被再次访问到了;
- 对于while循环来说,自增变量不归属于其语法结构中,在while循环结束之后还可以继续继续使用;
增强for循环
语法结构
for (元素类型 e : 数组或集合对象){
// 代码
}
注意
- 增强for循环冒号左侧 是定义变量,右边必须是数组或集合类型。且元素类型必须与数组或集合对象的元素类型相匹配。
- 优点:使用简单;
- 缺点:①只能从头到尾遍历,不能只遍历部分;②遍历list或数组,不能获得当前元素下标;
- 增强for循环内部是使用迭代器完成的,任何实现Iterable接口的对象都可以被增强for循环遍历。其中Collection是Iterable的子接口。故此Map没有实现Iterable接口,则不能使用增强for循环遍历。
死循环
while的死循环格式是常用的;
命令提示符窗口中Ctrl+C可以结束死循环。
for(;;){
}
while(true){
}
do{
}while(true);
跳转控制语句
continue
用于循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行;
for循环中,程序立即跳转到更新语句;
while 或 do…while 循环中,程序立即跳转到布尔表达式的判断语句;
break
用于循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环。
跳出最里层的循环,并且继续执行该循环下面的语句。
public class Demo1{
public static void main(String[] args){
for(int i =1;i<=5;i++){
if(i % 2 == 0){
//情况1
//continue; //情况2
break; //情况3
}
System.out.println(i);
//情况1:输出1-5
//情况2:输出1,3,5
//分析:i=1的时候,if是false,执行输出;i=2的时候,if是true,会跳出当前i=2的循环;i=3,if是false,执行输出;
//情况3:输出1
//分析:i=1的时候,if是false,执行输出;i=2的时候,if是true,会直接跳出for循环。
}
}
}
循环嵌套
语句结构:
顺序语句:以分号结尾,表示一句话的结束。
分支语句:if、switch,一对大括号表示其整体结构。
循环语句:for、while,一对大括号表示其整体结构 ;do…while以分号结尾表示其整体结构。
解释:
①任何循环结构对外都可以看成是一句话、一句代码;
②分支语句中包含分支语句称为分支嵌套;
③循环语句中包含循环语句称为循环嵌套。
案例:在控制台输出一天的小时和分钟。
public class Demo1{
public static void main(String[] args){
for(int hour = 0;hour<24;hour++){
for(int minute = 0;minute <60;minute++){
System.out.println(hour + "时" + minute +"分");
}
}
}
}
Random
作用:用于产生一个随机数。
使用步骤:
//①导包
import java.util.Random;
//导包的动作必须出现在类定义的上面
//②创建对象
Random r = new Random();
//r是变量名,可以变,其他的都不允许变;
//③获取随机数
int number = r.nextInt(10);
//number是变量名,可以变,数字10可以变,其他都不允许变。获取数据的范围[0,10),0可以取,10不可以取
案例:
需求:产生1-100的随机数。
思路:通过Random对象.nextInt得到0-99的随机数 然后 +1即可
import java.util.Random;
public class Demo1{
public static void main(String[] args){
//随机产生一个[0,10)之间的数
Random r = new Random();
int number = r.nextInt(10);
//System.out.println("number:" + number);
//产生一个1-100之间的随机数
int x = r.nextInt(100)+1;
System.out.println("x:" + x);
}
}
案例:猜数字,随机生成一个1-100之间的数,使用程序猜出这个数字是多少。
需要输入数字与随机生成的数字进行比较。
import java.util.Random;
import java.util.Scanner;
public class Demo1{
public static void main(String[] args){
Random r = new Random();
int number = r.nextInt(100)+1;
System.out.println("number:" + number);
while(true){
Scanner sc = new Scanner(System.in);
int sc_number = sc.nextInt();
if(sc_number > number){
System.out.println("猜测值大于真实值");
}else if(sc_number < number){
System.out.println("猜测值小于真实值");
}else{
System.out.println("sc:" + sc_number);
break;
}
}
}
}