第三章 分支与循环语句

第三章 分支与循环语句


3.1 if条件语句

单分支语句

...CodeA
if (布尔表达式){
	语句组;
}
...CodeB

在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;
public class Demo18 {
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		//提醒用户输入一个年份
		System.out.print("请用户输入一个年份");
		int nianFen = input.nextInt();
		//判断该年份是不是闰年
		if ((nianFen % 4 == 0 && nianFen % 100 != 0) || nianFen % 400 == 0){
		//输出结果
		System.out.println(nianFen + "是闰年")
		}
	}
}

双分支if-else语句`

...CodeA
if (布尔表达式){
	语句组A;
} else {
	语句组B;
}
...CodeB

在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;
public class Demo26{
	//点的坐标 圆心坐标 r 点到圆心距
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
	//提醒用户输入一个点
		System.out.print("Enter a point with two coordinates:");
		double x = input.nextDouble();
		double y = input.nextDouble();
	//计算点到圆心的距离
		double juli = Math.sqrt(Math.pow(x,2) + Math.pow(y,2));
		//判断点是否在圆内,并输出结果
		if (juli <= 10){
			System.out.println("Point (" + x + "," + y + ") is in the circle");
		} else {
			System.out.println("Point (" + x + "," + y + ") is not in the circle");
		}
	}
}

多分支if-else-if语句

...CodeA
if (布尔表达式){
	语句组A;
} else if (布尔表达式) {
	语句组B;
.......
}else if (布尔表达式) {
	语句组c;
} else {
	语句组D;
}
...CodeB

在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;
public class Demo17{
	public static void main(String[] args){
		Scanner input =  new Scanner(System.in);
		//提示用户输入体重与身高
		System.out.print("Enter shenGao and tiZhong:");
		double shenGao = input.nextDouble();
		double tiZhong = input.nextDouble();
		//求BMI
		double bmi = tiZhong / Math.pow(shenGao,2);
        //输出你的bmi
        System.out.println("BMI:" + bmi);
		//判断
		if (bmi < 18.5){
			System.out.println("偏瘦");
		} else if (bmi < 25.0){
			System.out.println("正常");
		} else if (bmi < 30.0){
			System.out.println("超重");
		} else {
			System.out.println("过胖");
		}
	}
}

3.2 switch分支语句

与if分支语句一样, 都是对条件的判断。switch一般用在条件较多的情况下, 但是有一个重要的细节,if语句可以对区间值或固定值进行判断,switch只能对固定值判断。(很少用,基本上只用if)

switch (变量) {
	case1:    //if (变量 == 值一) {语句组A}
		语句组A:
		break;
	case2:
		语句组B:
		break;
		...
	case 值n:
		语句组n:
		break;
	default:
		语句组n+1;
		break;
}

switch细节

1.switch所传入的变量,char,byte, short, int, String或者枚举类型
2.值1,值2,一直到值n,这几个值必须是同一个数据类型的
3.当变量匹配到相关case的值的时候,执行case中的语句,直到遇到break结束;如果该case语句中没有break,则继续向下执行,不再匹配case的值,直接输出,直到遇到另外一个break结束。

public class Sample{
	public static void main(String[] args){
		int a = 4;
		switch (a) {
			case 1:
				System.out.println("case 1 ");
				break;
			case 2:
				System.out.println("case 2");
				break;
			case 3:
				System.out.println("case 3");
			case 4:
				System.out.println("case 4");
			case 5:
				System.out.println("case 5");
				break;
			default:
				System.out.println("default");
				break;
		}
	}
}

输入一个年份,来判断一个年份的属相?

import java.util.Scanner;
public class Sample1{
    public static void main(String[] args){
        /*
        2020 % 12 = 4 鼠
        2021 % 12 = 5 牛
        */
        Scanner input = new Scanner(System.in);
        int year = input.nextInt();
        int choice = year % 12;
        switch (choice){
            case 0:
                System.out.println("猴年");
                break;
            case 1:
                System.out.println("sda");
                break;
            default:
                System.out.println("werwe");
                break;
        }
    }
}

3.3 for循环语句

循环主要解决具有规律性的且具有重复性的代码问题。

循环四要数

  1. 循环的初始化:循环的第一次执行从哪里开始
  2. 循环的继续条件:循环从当前轮是否向后执行下一轮
  3. 循环体:需要被循环执行的部分
  4. 循环的步长、周期:当前循环到下一轮循环之间的变化

循环问题可以分为两大类

  1. 已知循环次数的 一般使用for语句
  2. 未知循环次数但是已知循环结束条件 一般使用whlie 语句
for (1.循环的初始化;2.循环的继续条件;4.循环的步长) {
	3.循环体
}

1-2-3-4-2-3-4-2-3-4-2不满足,结束循环

import java.util.Scanner;
public class Sample2{
    public static void main(String[] args){
        // Scanner input = new Scanner(System.in);
        // int number = input.nextInt;
        /*           i
            *****    1 2 3 4 5
            i <= 5
        */
        for (int i = 1; i<=5;i++){
            System.out.print("*");
        }
        System.out.println();
        System.out.println("=====");
        /*       j     i
        *****    1    12345
        *****    2
        *****    3
        *****    4
        j <= 4   i <= 5
        */
        for (int j = 1; j <= 4;j++){
            for (int i = 1;i<=5;i++){
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("=====");
        /*       k     i
        *        1     1
        **       2     1 2
        ***      3     1 2 3
        ****     4     1 2 3 4
        *****    5     1 2 3 4 5
        ******   6     1 2 3 4 5 6
        *******  7     1 2 3 4 5 6 7
        K <= 7      i <= k
        */
        for (int k = 1;k <= 7;k++){
            for (int i = 1;i <= k;i++){
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("=====");
        /*          k       i
        ******      6       1 2 3 4 5 6
        *****       5       1 2 3 4 5
        ****        4       1 2 3 4
        ***         3       1 2 3 
        **          2       1 2
        *           1       1
        k >= 1   i <= k
        */
        for (int k = 6;k >= 1;k--){
            for (int i = 1;i <= k;i++){
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("=====");
        /*      k       i   
        *       1       1
        **      2       1 2
        ***     2       1 2 3
        ****    4       1 2 3 4 
        *****   5       1 2 3 4 5 
        ******  6       1 2 3 4 5 6      i <= k
        *****   7       1 2 3 4 5
        ****    8       1 2 3 4
        ***     9       1 2 3
        **      10      1 2
        *       11      1                i <= 12 - k
        k <= 11   
        */
        for (int k = 1;k <= 11 ;k++){
            for (int i = 1;i <= k && i <= 12 -k;i++){
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("=====");
        for (int k = 1;k <= 11;k++){
            for(int j =5;j >= k || j >= 12 - k ;j--){
                System.out.print(" ");
            }
            for(int i = 1;i <= k && i <= 12 -k;i++){
                System.out.print("*");
            } 
            System.out.println();
        }
        System.out.println("=====");
        //老师的
        for (int k = 1;k <= 11;k++){
            for (int i = 1;i <= Math.abs(k - 6);i++){
                System.out.print(" ");
            }
            for (int j = 1;j <= k && j <= 12 - k;j++){
                System.out.print("*");
            }
            System.out.println();
        }
        for (int k = 1;k <= 11;k++){
            for (int i = 1;i <= Math.abs(k - 6);i++){
                System.out.print(" ");
            }
            for (int j = 1;j <= k && j <= 12 - k;j++){
                System.out.print("* ");
            }
            System.out.println();
        }
        for (int k = 1;k <= 11;k++){
            for (int i = 1;i <= Math.abs(k - 6);i++){
                System.out.print(" ");
            }
            for (int j = 1;j <= k && j <= 12 - k;j++){
                if (j == 1 || j == k || j + k == 12){
                    System.out.print("* ");
                }
                else {
                    System.out.print("  ");
                }
            }
            System.out.println();
        }
    }
}

3.4 whlie循环语句

while主要用于解决未知循环次数,但是已知循环结束条件
whlie 可以和for循环相互转换因为其都逃不过循环四要数

for (int i = 1;i <= 5;i++) {
	System.out.println(i);
}
可以转换为whlie循环
int i = 1;
whlie (i <= 5) {
	System.out.println(i);
	i++;
}

whlie语法格式

1.循环的初始化
while (2.循环的继续条件){
3.循环体
4.循环的步长,周期
}

数值拆分求和

public class Sample{
	public static void main(String[] args){
		//输入一个未知长度的数字
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一个数字");
		int number = input.nextInt();
		int sum = 0;
		whlie (number != 0) {
			sum += number % 10;
			number /= 10;
		}
		System.out.println(sum)
	}
}

在这里插入图片描述

import java.util.*;
public class Demo32{
	public static void main(String[] args) {
		//电脑随机获取一个数
		Random random = new Random();
		int com = random.nextInt(101);
		//用户输入一个数
		Scanner input = new Scanner(System.in);
		int user = input.nextInt();
		while (true) {
			System.out.print("Enter your guess:");
			if (user > com) {
				System.out.println("high");
			} else if (user < com) {
				System.out.println("low");
			} else {
				System.out.println("yes");
				break;
			}
		}
	}
}

3.5 break 与continue 跳转语句

1、break
break语句的作用是中断单层循环,跳出循环体,也就是实现程序跳转到当前循环体右大括号末尾。

2、continue
实现程序跳转到当前循环体的开始处(for循环是跳转到条件控制语句),重新执行循环体。

总结

System.out.print()与System.out.println()的区别

1.println():先输出完毕再换行。
2.print():直接输出完毕后不换行。
3.println()不输出任何东西时,就输出一个换行符。

标识符命名规范

1.大驼峰式:主要针对类名,接口名,所有单词首字母大写。
2.小驼峰式:主要针对变量名,函数名,除第一个以外,其他单词首字母大写。
3.常量规范:所有单词大写,单词与单词之间用下划线分隔。
4.包名规范:所有单词小写,单词与单词之间用**.**分隔。

myAge 变量名
getMax() 函数名
MyMoney 类名,接口名
MAX_VALUE 常量名
com.oupeng.java 包名

中断控制流程语句

1、break
break语句的作用是中断单层循环,跳出循环体,也就是实现程序跳转到当前循环体右大括号末尾。

2、continue
实现程序跳转到当前循环体的开始处(for循环是跳转到条件控制语句),重新执行循环体。

3、return
实现程序跳转到当前方法的结束,并附带返回值给调用者。//直接结束程序/不在往下运行

for 的嵌套(每次外部循环,内部循环都要执行完这次循环)

1.for循环的嵌套,变量的位置取决于第一个循环每循环一次,第二个循环使用是不是要重新定义变量的值。是,放在一二之间,不是,一的外面。
2.内外循环独立进行
内部循环的条件是固定的,每次外部循环,内部循环都要执行完这次循环。

public class Sample1{
    public static void main(String[] args){
		int i,j;
		for(i=0;i<5;i++)
		{
			for(j=0;j<5;j++)
			printf("%c",a[j]);
			printf("\n");
		}		
	}

内部循环进行5次,外部循环也进行5次,相当于外部循环把内部循环的结果打印了5次,内部循环的条件是固定的(j<5),每次外部循环,内部循环都要进行5次
3.内部循环依赖于外部循环
内部循环的条件每次都是变化的,取决于外部循环

public class Sample1{
    public static void main(String[] args){
		int i,j;
		char a[5]="$$$$$";
		for(i=0;i<5;i++)
		{
			for(j=0;j<=i;j++)
			printf("%c",a[j]);
			printf("\n");
		}
	}

当外部循环进行第一次时,即i=0时,由于内部循环的条件为j<=i,此时0<=0,满足循环条件,在这种方式中,内部循环的条件每次都是变化的。因此,当外部循环进行一次时,内部循环进行打印出数组a[5]中的第一个元素a[1],即打印出一个$。以此类推打印出了a[5]中的所有元素。
4.说白了就是一个在一个for循环中写了另外一个for循环语句。在这种循环中,外层循环控制着执行的行,也就是“大圈”,内层循环控制着执行的列,也就是“小圈”。“大圈”执行一次循环,“小圈”要完整遍历一次,直至继续条件不满足。

做编程题方法总结(1、看题 2、分析数据 3、举例分析规律 (找到一个函数模型)4、写代码)

1.产生一个随机数

Random randon = new Random();
int com = random.nextInm(3);

2.循环中可以连续读取一段数字

import java.util.Scanner;
public class Demo52{
    /*
    3 5 2 5 5 5 0
    */
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter numbers:");
        int max = 0;
        int count = 0;
        while (true){
            int numbers = input.nextInt();
            if (numbers == 0){
                break;
            }
            if (numbers > max){
                max = numbers;
                count++;
            }
        }
        System.out.println(max);
        System.out.println(count);
    }
}

3.对如下,先找到规律,先减后增/先增后减,用绝对值,求函数模型
但是也可以分两个循环来写。

import java.util.Scanner;
public class Demo41{
    /* 5
              1
            2 1 2
          3 2 1 2 3
        4 3 2 1 2 3 4        先减后增  用绝对值
        3 2 1 0 1 2 3    + 1   y = |x| + 1 x属于[-3,3]
      5 4 3 2 1 2 3 4 5        y = |x| + 1 x属于[-4,4]
    第i行                      y = |x| + 1 x属于[-(i-1),i-1]
    */
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the number:");
        int number = input.nextInt();
        // for (int i = 1;i <= number;i++){
        //     for (int l = number;l > i ;l--){
        //         System.out.print("  ");
        //     }
        //     for (int j = i;j > 0;j--){
        //         System.out.print(j + " ");
        //     }
        //     for (int k = 2;k <= i;k++){
        //         System.out.print(k + " ");
        //     }
        //     System.out.println();
        // }
        for (int i = 1;i <= number;i++){
            for (int l = number;l > i ;l--){
                System.out.print("  ");
            }
            for (int j = -(i - 1);j <= i - 1;j++){
                System.out.print(Math.abs(j) + 1 + " ");
            }
            System.out.println();
        }
    }
}
public class Demo43{
    /*
    1 2 4 8 16 32 16 8 4 2 1    先递增后递减
    0 1 2 3  4  5  4 3 2 1 0    y = i-1 - |x| x=(-(i-1),i-1)       
    */
    public static void main(String[] args){
        for (int i = 1;i <= 8;i++){
            for (int k = 8; k > i;k--){
                System.out.print("    ");
            }
            for (int j = -(i - 1);j <= i - 1;j++){
                int k = i - 1 - Math.abs(j);
                int l = (int)Math.pow(2,Math.abs(k));
                System.out.printf("%4d",l);
            }
            // for (int j = 0; j >= -i;j--){
            //     System.out.print((int)Math.pow(2,Math.abs(j)) + " ");
            // }
            // for (int k = i-1; k >= 0 ;k--){
            //     System.out.print((int)Math.pow(2,k) + " ");
            // }
            System.out.println();
        }
    }
}

4.在if 条件语句和循环语句中定义的变量,只能在里面调用; 而在外定义的变量会随着两者里面的相同变量的改变而改变。
boolean : 如果该循环有两种结束方式,一种是正常结束,另一种是break结束。在第二个循环中,如果有break,一般使用boolean.

int number = 2;
int count = 0;
while (count < 50){
boolean flag = true;
for (int i = 2;i <= number / 2;i++){
    if (number % i == 0){
        flag = false;
        break;
    }
}
if (flag){
    System.out.print(number + "\t");
    count++;
    if (count % 10 == 0){
        System.out.println();
    } 
}
number++;
}

5.反转数字
5.1
在这里插入图片描述
5.2十进制转二进制(字符串+数字等于字符串) 反转排序

import java.util.Scanner;
public class Demo50{
    /*
    11 / 2 余 1
    5 / 2 余1
    2 / 2 余 0
    1 / 2 余 1
    1 + "" = "1"
    "1" + 1 = "11" //**+**表示连接
    */
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter number:");
        int number = input.nextInt();
        String sum = "";
        while (number != 0){
            sum = number % 2  + sum;
            number /= 2;
        }
        System.out.println(sum);
    }
}
	System.out.println("%4d");
	这个东西占四格。

例题

在这里插入图片描述

在这里插入图片描述

import java.util.Scanner;
public class Demo29{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        //提示用户输入
        System.out.print("Enter r1:");
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();
        double w1 = input.nextDouble();
        double h1 = input.nextDouble();
        System.out.print("Enter r2:");
        double x2 = input.nextDouble();
        double y2 = input.nextDouble();
        double w2 = input.nextDouble();
        double h2 = input.nextDouble();
        if (y2 - y1 <= (h1 -h2) / 2 &&
        y1 - y2 <= (h1 -h2) / 2 && 
        x2 - x1 <= (w1 - w2) / 2 && 
        x1 - x2 <= (w1 - w2) / 2) {
            System.out.println("r2 in r1");
        } else if (y2 - y1 >= (h1 + h2) / 2 ||
        y1 - y2 >= (h1 + h2) / 2 || 
        x2 - x1 >= (w1 + w2) / 2 || 
        x1 - x2 >= (w1 + w2) / 2) {
            System.out.println("r2 out of r1");
        } else {
            System.out.println("r2 xianjiao r1");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值