Java的语法结构(流程控制)
顺序结构
分支结构
单分支if
if(值---Boolean){
{单行语句;}/ {多行语句;}
if(条件){
代码1
}else{
代码2
}
if(条件){
代码一
}else if{
代码二
}else{
代码三
}
做一个小程序(学星期)
lib提供好的变量 Scanner 开发者给我们提供好的一个类文件 public final class Scanner
Scanner y = new Scanner(); //创建引用类型的对象
想用Scanner需要三步
1.在类上面的第一行输入 import java.utli.Scanner
2.需要输入之前的Scanner input = new Scanner(System.in);
3.通过y. 来让它做事 int = nextInt(); String = nextLine()
import java.util.Scanner;
public class StudyEnglish{
public static void main(String[] args){
System.out.println("请输入一个数字,我告诉你对应星期的英文");
Scanner input = new Scanner(System.in); //对象
int day = input.nextInt(); //可以读取我们输入的文字
//input.nextLine(); 读取字符串
if(day == 1){
System.out.println("Monday");
}else if(day == 2){
System.out.println("Tuesday");
}else if(day == 3){
System.out.println("wednesday");
} else if(day == 4){
System.out.println("Thusday");
} }else if(day == 5){
System.out.println("friday");
} else if(day == 6){
System.out.println("saturday");
} else if(day == 7){
System.out.println("sunday");
}
}else{
System.out.println("小朋友你是不是傻,一周只有七天呀");
}
}
}
如果明天不下雨就出去玩,出去玩,去哪玩?(嵌套)
if(明天下雨){
在学校;
}else{
出去玩;
if(坐过山车){
游乐场;
}else{
影院;
}
}
小任务
1.利用if语句实现一个判定给定月份对应的季节
写程序时需要注意如下问题:
1.增强可读性 起名字,缩进,注释
2.健壮性 判断时逻辑要严谨
3.实现功能的基础上 能不能优化(代码结构--简单 减少冗余 性能-- 内存空间--)
import java.util.Scanner;
public class Season{
public static void main(String[] args){
//创建一个month的变量用来存储月份的值
Scanner input = new Scanner(System.in);
System.out.println("请输入一个月份,我帮您判断季节");
int month = input.nextInt() ; //帮我们读取数字
//通过month存储的值 进行季节的判断
if(month>12 ||month <1){
System.out.println("您输入的数据有误");
}else if(month >= 3 && month <= 5){
System.out.println("春天");
}else if(month >= 6 && month <= 8){
System.out.println("夏天");
}else if(month >= 9 && month <= 11){
System.out.println("秋天");
}else{
System.out.println("冬天");
}
}
}
2.用if语句实现一个 判断学生的对应区间
3.扩展:用if语句实现一个随机摇色子的游戏 Math.random()
随机要一个骰子的点数
玩家利用Scanner输入,猜大小
利用if比较,猜对啦,猜错啦
import java.lang.Math;
import java.util.Scanner;
public class DiceGame{
public static void main(String[] args){
//随机摇骰子的过程 随机产生一个骰子的点数 1-6整数
//Math -->Scanner(1.import 2,new 3,input.next();)
double value = Math.random();
int number =(int)(value*6+1);
//value结果有范围 (0.0-1.0)
//让玩家猜大小
Scanner input = new Scanner(System.in);
System.out.println("买大买小,买定离手");
String choose = input.nextLine();//读取输入的数字
//比较点数与猜测结果
System.out.println("本次摇骰子的点数为:"+number);
//点数123 小 点数456 大
//(number <= 3 && choose.equals("小"))||(number >=4 && choose.equals("大")
//== equals();的区别 ==用于基本数据类型 另一个用于引用数据类型
if((number <= 3 && choose.equals("小")||(number >=4 && choose.equals("大")){
System.out.println("恭喜您,猜对啦");
}else{
System.out.println("对不起 猜错啦 麻烦付一下款");
}
}
}
多分支switch
switch(值){ //byte short int char enum String
case 值1:
代码1;
case值2:
代码2;
default:
代码
}
输入一个数字,写出对应星期的英文
import java.util.Scanner;
public class English{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请您输入一个数字,我帮您输出对应星期的英语");
int day = input.nextInt();
switch(day){
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("tuesday");
break;
case 3:
System.out.println("wednesday");
break;
case 4:
System.out.println("thusday");
break;
case 5:
System.out.println("friday");
break;
case 6:
System.out.println("satusday");
break;
case 7:
System.out.println("sunday");
break;
default:
System.out.println("error");
}
}
}
if 好处在于可以写复杂的逻辑,缺点是执行比较慢
switch好处在于判断的过程效率更高,缺点在于只能固定值
任务
1.利用switch语句实现一个判断学生成绩对应的区间
import java.util.Scanner;
public class Demo{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入学生的成绩,我来给你判断区间:");
int score = input.nextInt();
switch(score/10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
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:
if(score == 100){
System.out.println("满分");
break;
}
default:
System.out.println("不认识你");
2.利用Scanner输入一个值(代表星期几)
为小茗同学制定一个学习计划
135学习语文
246学习数学
7玩游戏
import java.util.Scanner;
public class DemoT{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入周几,我帮你制定计划");
int day = input.nextInt();
switch(day){
case 1:
case 3:
case 5:
System.out.println("语文");
break;
case 2:
case 4:
case 6:
System.out.println("数学");
break;
case 7:
System.out.println("玩游戏");
break;
default:
System.out.println("小屁孩,想啥呢");
}
}
}
循环结构
循环:重复不停的做相同的事 从哪开始到哪结束?
循环的三个条件:初始值 终点判定条件 变化量
for (初始值;终点判定条件;变化量){ //允许将三个条件写在()内
执行的代码
public class Run{
public static void main(String[] args){
for(int round = 1;round<=5;round++){
System.out.println("这是第"+round+"圈啦");
}
//循环执行完毕 round==6;
System.out.println("循环执行完毕:"+round);
//变量的声明周期问题(变量 --栈--从声明楷书创建出来。用完立即回收)
}
}
输出结果:
错误
改编1:
public class Run{
public static void main(String[] args){
int round = 1;
for(;round<=5;round++){
System.out.println("这是第"+round+"圈啦");
}
//循环执行完毕 round==6;
System.out.println("循环执行完毕:"+round);
//变量的声明周期问题(变量 --栈--从声明楷书创建出来。用完立即回收)
}
}
输出结果:
这是第1圈啦
这是第2圈啦
这是第3圈啦
这是第4圈啦
这是第5圈啦
循环执行完毕:6
改编二:
public class Run{
public static void main(String[] args){
int round = 1;
for(;round<=5;){
round++;
System.out.println("这是第"+round+"圈啦");
}
//循环执行完毕 round==6;
System.out.println("循环执行完毕:"+round);
//变量的声明周期问题(变量 --栈--从声明楷书创建出来。用完立即回收)
}
}
输出结果:
这是第2圈啦
这是第3圈啦
这是第4圈啦
这是第5圈啦
这是第6圈啦
循环执行完毕:6
改编三:
public class Run{
public static void main(String[] args){
int round = 1;
for(;round<=5;){
System.out.println("这是第"+round+"圈啦");
round++;
}
//循环执行完毕 round==6;
System.out.println("循环执行完毕:"+round);
//变量的声明周期问题(变量 --栈--从声明楷书创建出来。用完立即回收)
}
}
输出结果:
这是第1圈啦
这是第2圈啦
这是第3圈啦
这是第4圈啦
这是第5圈啦
循环执行完毕:6
改编四:
public class Run{
public static void main(String[] args){
int round = 1;
for(;round<=5;){
System.out.println("这是第"+round++ +"圈啦");
}
//循环执行完毕 round==6;
System.out.println("循环执行完毕:"+round);
//变量的声明周期问题(变量 --栈--从声明楷书创建出来。用完立即回收)
}
}
输出结果:
这是第1圈啦
这是第2圈啦
这是第3圈啦
这是第4圈啦
这是第5圈啦
循环执行完毕:6
改编五:
public class Run{
public static void main(String[] args){
int round = 1;
for(;round<=5;){
System.out.println("这是第"+ ++round +"圈啦");
}
//循环执行完毕 round==6;
System.out.println("循环执行完毕:"+round);
//变量的声明周期问题(变量 --栈--从声明楷书创建出来。用完立即回收)
}
}
输出结果为:
这是第2圈啦
这是第3圈啦
这是第4圈啦
这是第5圈啦
这是第6圈啦
循环执行完毕:6
改编六:
public class Run{
public static void main(String[] args){
int round = 1;
for(;round<=5;round +=2){
System.out.println("这是第"+ round +"圈啦");
}
//循环执行完毕 round==6;
System.out.println("循环执行完毕:"+round);
//变量的声明周期问题(变量 --栈--从声明楷书创建出来。用完立即回收)
}
}
输出结果:
这是第1圈啦
这是第3圈啦
这是第5圈啦
循环执行完毕:7
需求:小学数学应用题
操场上有一百多个人 让他们排队
三人一组 多一个 四人一组多两个 五人一组多两个
求解 操场上有多少人?
解:设操场人数为x
x%3==1 x%4 == 2 x%5 ==2
public class Test{
public static void main(String[] args){
for(int x = 100 ; x < 200;x++){
if(x%3==1 && x%4==2 && x%5==2){
System.out.println("操场上的人数为:"+x);
}
}
}
}
输出结果为:142
任务;
甲乙丙丁四个人加工零件 加工零件的总数为370
如果甲加工的零件数多10个
如果乙加工 的零件数少20个
如果丙加工的零件数乘以二
如果丁加工的零件数除以二
则四个人加工的数量就相等啦
则四个人加工的零件分别是多少?
分析:设相等的那个值为x
那么(x-10)+(x+20)+(x*2)+(x/2)=370
public class Test{
public static void main(String[] args){
for(int x = 45 ; x < 95;x++){
if((x-10)+(x+20)+(x*2)+(x/2)==370){
System.out.println("甲加工的零件数为:"+(x-10));
System.out.println("乙加工的零件数为:"+(x+20));
System.out.println("丙加工的零件数为:"+(x*2));
System.out.println("丁加工的零件数为:"+(x/2));
}
}
}
}
输出结果为:
甲加工的零件数为:70
乙加工的零件数为:100
丙加工的零件数为:160
丁加工的零件数为:40
2.鸡兔同笼
小鸡和小兔子总数为50只,脚的总数为160只
求小鸡和小兔各多少只?
public class Test{
public static void main(String[] args){
for(int x = 1 ; x < 50;x++){
if(x*2 + (50-x)*4==160){
System.out.println("鸡的个数为:"+x);
System.out.println("兔子的个数为:"+(50-x));
}
}
}
}
输出结果为:
鸡的个数为:20
兔子的个数为:30
3.。通过循环找寻三位数字的水仙花数
153 --->1 5 3(然后各自立方)
1+125+27 = 153
public class Flower{
public static void main(String[] args){
for(int num = 100;num<1000;num++){
int b = num/100;
int s = num/10%10;
int g = num%10;
if(b*b*b + s*s*s +g*g*g == num){
System.out.println(num+"是水仙花");
}
}
}
}
输出结果为:
水仙花数为:153
水仙花数为:370
水仙花数为:371
水仙花数为:407
优化版本:
public class Flower{
public static void main(String[] args){
//double value = Math.pow(double a,double b); //帮我们计算a的b次方
for(int num = 100;num<1000;num++){
int b = num/100;
int s = num/10%10;
int g = num%10;
if(Math.pow(b,3)+Math.pow(s,3)+Math.pow(g,3) == num){
System.out.println(num+"是水仙花");
}
}
}
}
循环嵌套
需求:输出一行*
import java.util.Scanner;
public class Flower{
public static void main(String[] args){
//复用性
System.out.println("尊敬的客户,您需要几个星星:");
Scanner input = new Scanner(System.in);
int count = input.nextInt();
for(int i = 1;i<=count;i++){
System.out.print("*");
}
}
}
输出结果为:
尊敬的客户,您需要几个星星:
3
***
输出一列*
import java.util.Scanner;
public class Flower{
public static void main(String[] args){
//复用性
System.out.println("尊敬的客户,您需要几个星星:");
Scanner input = new Scanner(System.in);
int count = input.nextInt();
for(int i = 1;i<=count;i++){
System.out.println("*");
}
}
}
输出结果为:
尊敬的客户,您需要几个星星:
3
*
*
*
输出四行*
import java.util.Scanner;
public class Flower{
public static void main(String[] args){
//复用性
System.out.println("尊敬的客户,您需要几个星星:");
Scanner input = new Scanner(System.in);
int count = input.nextInt();
for(int i = 1;i<=count;i++){
for(int j = 1;j<=count;j++)
System.out.print("*");
}
System.out.println("*");
}
}
}
//i控制行数,j控制每行星星的个数
画出*
**
***
****
public class Star{
public static void main(Sting[] args){
for(int i = 1;i<=4;i++){
for(int j;j<=i;j++){
System.out.print("*");
}
//换行
System.out.println();
}
}
}
画出 *
**
***
****
public class Star{
public static void main(Sting[] args){
for(int i = 1;i<=4;i++){ //控制行数
//画占位符
for(int j;j<=4-i;j++){
System.out.print("$");
}
//画星星
for(int j;j<=i;j++){
System.out.print("*");
}
//换行
System.out.println();
}
}
}
任务
1.******* //画星星,换行
***#*** //画星星 画空格 画星星 换行
**###** //画星星 画空格 画星星 换行
*#####* //画星星 画空格 画星星 换行
public class HuaTu{
public static void main(String[] args){
for(int i;i<=4;i++){ //控制行数
if(i=1){ //第一行的规则
Syystem.out.print("*******");
}else{ //后三行的规则
for(j=1;j<=5-i ;j++); //画星星
System.out.print("*");
}
for(j=1;j<=2*i-3 ;j++){ //画空格
System.out.print(" ");
}
}
System.out.println(); //换行
}
}
}
优化版本:提高了复用性
import java.util.Scanner;
public class HuaTu{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请您输入行数:");
int line = inpt.nextInt();
for(int i;i<=line;i++){ //控制行数
if(i=1){ //第一行的规则
Syystem.out.print("*******");
}else{ //后三行的规则
for(j=1;j<=((line+1)-i ;j++); //画星星
System.out.print("*");
}
for(j=1;j<=2*i-3 ;j++){ //画空格
System.out.print(" ");
}
}
System.out.println(); //换行
}
}
}
2. 1
121
12321
1234321
分析:
空格占位
左边数字 改变--->利用变量 利用循环里的变量j来控制 j++
右边数字 改变--->利用变量 j--
public class JinZiTa{
public static void main(String[] args){
for(int i=1;i<=4;i++){ //控制行数
for(int j;j<=4-i;j++){ //空格
System.out.print("");
}
for(int j;j<=i;j++){//左边数字
System.out.print("j");
}
for(int j;j>=1;j--){ //右边数字
System.out.print("j");
}
System.out.println();
}
}
}
3.九九乘法表
public class Test{
public static void main(String[] args){
//打印输出乘法表
//控制行数
for(i = 1;i <= 9;i++){
//控制每一行表达式的个数
for(int j = 1;j <= i;j++){
System.out.println(j+"*"+i+"="+(j*i)+"\t");
System.out.println();
}
}
}
4.找寻2-100之间的素数
2是素数
3是素数
4不是素数
5是素数
6不是素数
public class SuShu{
public static void main(String[] args){
//2--100 之间的素数,每一个数字做一次输出
for(int num=2;num<=100;num++){
boolean x=false;
//先把1和本身这两个数字刨除掉
//把剩下的数字挨个找寻一遍 看一看还有没有整除的数字
for (int i = 2; i < num/2;i++) {
if(num % i == 0) {
System.out.println(num+"不是素数");
x = true;
break; //当满足if条件的时候 终止循环
}
}
if(x == false){
System.out.println(num+"是素数");
}
}
}
}
===================================================================================
转义字符
\ 转义字符 ,将身后的一个字符意思发生转换
转换特殊的符号,比如" ' \
转换几个特殊的字母 比如 \n换行 \r回车 \t制表
两个重要的关键字
break
public class BreakTest{
public static void main(String[] args){
for(int i = 1;i <= 5;i++){
System.out.println(i);
}
}
}
输出结果为:
1
2
3
4
5
执行完毕后,i的值是6
public class BreakTest{
public static void main(String[] args){
for(int i = 1;i <= 5;i++){
if(i == 3){
break; //终断,终止 当满足if条件的时候终断循环
}
System.out.println(i);
}
}
}
输出结果为:
1
2
执行完毕后i的值为3
public class BreakTest{
public static void main(String[] args){
for(int i = 1;i <= 5;i++){
for(int j = 1;j <= 5;j++){
System.out.println("hello");
}
}
}
//循环执行了多少次?25 hello输出了多少次?25
//循环执行完毕 i j 的值分别是几? 6 6
public class BreakTest{
public static void main(String[] args){
for(int i = 1;i <= 5;i++){
for(int j = 1;j <= 5;j++){
if(j==3){
break;
}
System.out.println("hello");
}
}
}
//循环执行了多少次?10 hello输出了多少次?10
//循环执行完毕 i j 的值分别是几? 6 3
public class BreakTest{
public static void main(String[] args){
int i = 1;
int j = 1
for(;i <= 5;i++){
for(;j <= 5;j++){
if(j==3){
break;
}
System.out.println("hello");
}//i==1 j==3 执行两次输出 i==2 j==3无输出
}
}
//循环执行了多少次?2 hello输出了多少次?2
//循环执行完毕 i j 的值分别是几? 6 3
continue //终断本次循环,继续下一次循环
public class ContinueTest{
public static void main(String[] args){
for(i = 1;i <= 5;i++){
if(i == 3){
continue;
}
System.out.println("hello");
}
}
}
//执行过程中i的输出 1 2 4 5
//循环执行完毕 i 的值是几? 6
public class BreakTest{
public static void main(String[] args){
for(int i = 1;i <= 5;i++){
for(int j = 1;j <= 5;j++){
if(j==3){
continue;
}
System.out.println("hello");
}
}
}
//循环执行了多少次?20 hello输出了多少次?20
//循环执行完毕 i j 的值分别是几? 6 6
public class BreakTest{
public static void main(String[] args){
int i = 1;
int j = 1
for(;i <= 5;i++){
for(;j <= 5;j++){
if(j==3){
contine;
}
System.out.println("hello");
}//i==1 j==6 执行四次输出 i==2 j==6无输出
}
}
//循环执行了多少次?4 hello输出了多少次?4
//循环执行完毕 i j 的值分别是几? 6 6
public class BreakTest{
public static void main(String[] args){
ok:for(int i = 1;i <= 5;i++){
ko: for(int j = 1;j <= 5;j++){
if(j==3){
break ok;
}
System.out.println("hello");
}
}
}
//输出几次?2 i 和 j 分别是几 1 3
//break为什么终断的事内层循环? 就近原则
//如何让break终断外层循环?? //给循环起名字 循环标记
public class BreakTest{
public static void main(String[] args){
ok:for(int i = 1;i <= 5;i++){
ko: for(int j = 1;j <= 5;j++){
if(j==3){
continue ok;
}
System.out.println("hello");
}
}
}
//输出几次?10 i 和 j 分别是几 6 3
//break为什么终断的事内层循环? 就近原则
//如何让break终断外层循环?? //给循环起名字 循环标记
while
初始值;
while(终点判定条件){ //()内只允许写一个
好多好多执行;
}
public class WhileTest{
public static void main(String[] args){
int i = 1;
while(i <= 5){
i++;
System.out.println(i);
}
}
}
//执行输出什么: 1 2 3 4 5
//执行完毕后 i==6
//我的理解就是for的变体
//变量定义在循环外,生命周期长了
//变化量放在循环内(注意上下的顺序可能对执行产生影响)
do...while
do{
好多好多执行;
变化量;
}while(终点判定条件);
public class DoWhileTest{
public static void main(String[] args){
int i = 1;
do{
i++;
System.out.println(i); //12345
while(i <= 5);
}
}
}
whie是先判断后执行 条件不满足 不执行
do ..while先执行后判断 条件不满足 至少执行一次
小任务
1.有一个水池 已经盛满了120立方米的水
有一个进水管 每小时进水18立方米
有一个排水管 每小时排水30立方米
两个水管一起开 经过多少个小时 水池的水排放干净?
public class WhileTest{
public static void main(String[] args){
int sum = 120; //表示水池中的水
int hour = 0; // 记录经过的小时数
while(sum > 0){
sum +=18;
sum -=30;
hour++;
}
System.out.println(hour);
}
}
画图
*
***
*****
*******
public class Test{
public ststic void main(String[] args){
int i = 1;
while(i<=4){
//画空格
int j = 1;
while(j<=4-i){
System.out.println(" ");
j++;
}
//画*
int k = 1;
while(k<=2*i-1){
System.out.println("*");
k++;
}
//换行
Syatem.out.println();
i++;
}
}
}
3.小茗同学从A点以7km/h的速度向B点出发
哥哥从B点以8km/h的速度向A点出发
A,B之间的距离是1000km
求解小明和哥哥经过多少个小时才能相遇
public class WhileTest{
public static void main(String[] args){
int sum = 1000; //表示总路程
int hour = 0; // 记录经过的小时数
while(sum > 0){
sum -=18;
sum -=7;
hour++;
}
System.out.println(hour);
}
}
4.有一个瓜农卖西瓜 一车西瓜总共1020个
每天卖掉总数的一半多两个
求解瓜农几天才能把所有的西瓜卖完
public class WhileTest{
public static void main(String[] args){
int sum = 1020; //表示总路程
int day = 0; // 记录经过的小时数
while(sum > 0){
sum = sum - 1020/2 - 2;
day++;
}
System.out.println(day);
}
}
写代码规范
1.可读性
起名字 规范
2.健壮性
程序严谨