- if
- switch
- for
- while
- do…while
package com.uncle.syntactic_structure;
import java.util.Scanner;
/**
* java语法结构---流程控制
* 顺序结构
* 分支结构
* 单分支if 多分支switch
* 循环结构 for while do...while
*
* 变量的生命周期问题(变量 栈内存空间 从声明开始创建出来 用完及回收)
*/
public class SyntacticStructure {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请你输入一个星期对应的数字,以此来判断是否上班");
int number = input.nextInt();
if (number == 1) {
System.out.println("您好,您输入的是星期一对应的数字");
} else if (number == 2) {
System.out.println("您好,您输入的是星期二对应的数字");
} else {
System.out.println("算了 累了");
}
switch (number) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("这是上班的日子");
break;
case 6:
case 7:
System.out.println("放假了,宝贝");
break;
default:
System.out.println("没有这个星期啊");
break;
}
//案例
Scanner input = new Scanner(System.in);
System.out.println("请输入一个学生的成绩,我来帮助你来判断区间");
int score = input.nextInt();
switch (score/10) {
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("学霸本ba");
break;
}
default:
System.out.println("没你这个人啊");
break;
}
/*
单分支结构if
if(boolean形式的值)
{单条语句} {多条语句}
if(){
代码1
}else{
代码2
}
if(){
}else if(){
}...else if(){
}else{
}
switch(值){// byte short int char 1.5enum 1.7String
case 值1:
代码1;
[break;] 可有可无
case 值2:
代码2;
default:
代码
}
if(很复杂的条件){
}else if(){
}else if(){
}
if 好处 (可以写复杂的逻辑) 不好处 执行比较慢
switch 好处 (判断的过程效率更高) 不好处 只能做==(固定值)
*/
//案例
for(int x = 100;x<200;x++){
if(x%3==1 && x%4==2 && x%5==2){
System.out.println("操场上的人数为:"+x);
}
}
//案例
int round=1;
for( ; round<=5 ; round+=2){
System.out.println("跑到第"+ round +"圈啦");//2 4 6
}
//循环执行完毕 round===6
System.out.println("循环执行完毕:"+round);
//生命周期问题
//变量的生命周期问题(变量 栈内存空间 从声明开始创建出来 用完及回收)
/*
循环结构 for while do..while
循环? 重复不停的做同样的事情
爬楼梯 1-->5楼
操场跑圈 1-->5圈
1--5圈
从哪里开始 1圈 起点
到哪里结束 5圈 判断 终点的条件
跑起来变化 增减
程序中想要执行一个正常的循环 现实生活是类似 需要满足三个条件(必要)
初始值 终点判定条件 变化量
允许将三个必要条件都写在()内
for(1初始值 ; 258终点判定条件 ; 47变化量 ){
36好多好多执行的代码;
}
*/
//案例
/*
1.加工零件问题
甲乙丙丁四个人加工零件
加工的总零件数为370个
如果甲加工的零件数多10
如果乙加工的零件数少20
如果丙加工的零件数乘以2
如果丁加工的零件数除以2
则四个人加工的零件数就相等啦
求 四个人加工的零件个数分别是多少?
*/
//设四个人相等时的数是x
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));
}
}
//案例
/*
2.鸡兔同笼问题
小鸡 小兔子 关在同一个笼子里 小鸡两只脚 小兔子四只脚
小鸡+小兔子 总数 50只 脚的总数160只
求 小鸡 和 小兔子各多少只。
*/
//解析
// 设 小鸡x只 小兔子 (50-x)
// x*2+(50-x)*4 ==160
// 给计算机一个范围 挨个尝试某一个x满足我们的条件
for(int x=1;x<50;x++){
if(x*2+(50-x)*4 ==160){
System.out.println("小鸡的个数为:"+x);
System.out.println("小兔子个数为:"+(50-x));
}
}
//案例
/*
3.通过循环找寻三位数字的水仙花数
153---> 1 5 3
1 + 125 + 27 == 153
100-999之间挨个尝试 满足上述规则数字 153 370 371 407
*/
for(int num=100;num<1000;num++){
int b = num/100;
int s = num/10%10;// num%100/10;
int g = num%10;
if(b*b*b+s*s*s+g*g*g==num){
System.out.println(num+"是水仙花数");
}
}
for(int num=100;num<1000;num++){
if(Math.pow(num/100,3)+Math.pow(num%100/10,3)+Math.pow(num%10,3)==num){
System.out.println(num+"是水仙花数");
}
}
//转义字符
// \ 转义字符 将身后的一个字符意思发生转换
// 转换特殊的符号 比如 " ' \
// 转换几个特殊的字母 比如 \n换行 \r回车 \t制表符
//
//
//画星星案例1
//******* 画星星 换行 i==1 4-->7 5-->9
//*** *** 画星星 画空格 画星星 换行 i==2 3 1 3
//** ** 画星星 画空格 画星星 换行 i==3 2 3 2
//* * 画星星 画空格 画星星 换行 i==4 1 5 1
//可读性 健壮性(严谨) 优化(结构 冗余 性能 内存 复用 扩展) 2*i-3
Scanner input = new Scanner(System.in);
System.out.println("请您输入行数:");
int line = input.nextInt();
for(int i=1;i<=line;i++){//控制行数
if(i==1){//第一行规则
//画星星
for(int j=1;j<=2*line-1;j++){
System.out.print("*");
}
}else{//后三行规则
//画星星
for(int j=1;j<=(line+1)-i;j++){
System.out.print("*");
}
//画空格
for(int j=1;j<=2*i-3;j++){
System.out.print(" ");
}
//画星星
for(int j=1;j<=(line+1)-i;j++){
System.out.print("*");
}
}
//换行
System.out.println();
}
//画星星案例2
//数字金字塔 空格 左边 右边
// 1 i==1 3 1-1 0
// 12 1 i==2 2 1-2 1-1
// 123 21 i==3 1 1-3 2-1
// 1234 321 i==4 0 1-4 3-1
for(int i=1;i<=4;i++){//控制行数
//空格占位
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
//左边数字 改变--利用变量 利用循环里层的变量j来控制 j++
for(int j=1;j<=i;j++){
System.out.print(j);
}
//右边数字 改变--利用j变量 j--
for(int j=i-1;j>=1;j--){
System.out.print(j);
}
//换行
System.out.println();
}
//案例3
//打印输出9*9乘法表
//1*1=1 表达式当做--?
//1*2=2 2*2=4
//1*3=3 2*3=6 3*3=9
// j + "*" + i + "=" + j*i
//被乘数 * 乘数 = 乘积
//在一行之中 被乘数发生变化 j 乘数固定 i
for(int i=1;i<=9;i++){//控制行数
//画一个?
for(int j=1;j<=i;j++){//控制每一行表达式的个数
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
//换行
System.out.println();
}
//案例4
//想一个事情 大叔 张三我的学生(A大学)
// 我 走到A大学学校门口 巧遇张三
// 我在学校门口等 张三进学校去钱包
// 去钱包的过程中不许做其他的事情 学校的长椅上休息
// 张三进入学校 我在门口等 --->出来学校 怎么知道没有座过椅子(椅子刚刷了油漆)
// 1.在进学校之前 需要在他的身上放一个标识 (干净的裤子)
// 2.如果坐过椅子 标识改变(变脏啦)
// 3.出来学校再次看一看标识 (如果跟进学校之前一样 证明没做过 否则做过)
// 2-100之间的素数 每一个数字做一个输出
for(int num=2;num<=100;num++){
//先把1和本身这两个数字 刨除掉
//在剩下的数字中挨个找寻一遍 看一看还有没有其他的整除数字
boolean x = false;//标识干净的裤子 //内存空间小
for(int i=2;i<=num/2;i++){//在其余的数字中挨个找寻 还有没有能整除的
if(num%i==0){
System.out.println(num+"不是素数");
x = true;//相当于标识修改啦 变脏啦
break;//不是中断if 当满足if条件的时候中断循环
}
}
if(x==false){
System.out.println(num+"是素数");
}
}
/*
while
do...while
循环想要执行 需要三个必要条件 初始值 终点判定条件 变化量
for( 1初始值 ; 2终点判定条件 ; 4变化量 ){
3好多好多执行;
}
允许将三个条件都写在()内 不是必须
初始值 ;
for( ; 终点判定条件 ; ){
好多好多执行;
变化量 ;
}
初始值;
while(终点判定条件){// ()内只允许写一个
好多好多执行;
变化量;
}
我理解就是一个for循环的变体
变量定义在循环外 生命周期长了
变化量放在循环内(注意上下的顺序可能对执行产生影响)
while先判断后执行 条件不满足不执行啦
do..while先执行后判断 条件不满足 至少执行一次
初始值;
do{
好多好多执行;
变化量;
}while(终点判定条件);
*/
int i = 1;
while(i<=4){
//画空格占位
int j = 1;
while(j<=4-i){
System.out.print(" ");
j++;
}
//画星星
int k = 1;
while(k<=2*i-1){
System.out.print("*");
k++;
}
//换行
System.out.println();
i++;
}
}