Java-程序逻辑控制

目录

一.顺序结构

二.分支结构

1.if语句

用法展示1-基本用法

用法展示2-多分支情况

注意事项

2.switch语句

用法展示

注意事项

三.循环结构

1.while循环

用法展示

注意事项

break和continue的用法

2.for循环

用法展示

注意事项(与while循环相似)

3.do while循环

用法展示

注意事项

四.输入和输出

1.输出到控制台

2.从键盘输出

用法展示1

用法展示2

注意事项

五.练习

1.打印年龄

2.判断素数

3.打印素数

4.输出闰年

5.打印乘法口诀表

6.找出最大公约数

7.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

8.统计数字9

9.计算水仙花数

10.模拟输密码场景

11.返回参数二进制中1的个数

12. 获取一个数二进制序的所有奇、偶数位

13. 输出整数的每一位

14.猜数字游戏


一.顺序结构

用法展示

public class Test {
    public static void main(String[] args) {
        System.out.println("hello");
        System.out.println("world");
    }
}

用法很简单,需要注意的是如果调整代码的书写顺序, 则执行顺序也发生变化

二.分支结构

1.if语句

用法展示1-基本用法

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        if(a==b){//括号里面的是一个布尔表达式,当表达式为真时执行if中的语句
            System.out.println("相等");
        }else{//表达式为假时执行else里的语句
            System.out.println("不相等");
        }
    }
}

用法展示2-多分支情况

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        if(a>b){//条件时执行的代码
            System.out.println("a大于b");
        }else if(a<b){//条件满足时执行的代码
            System.out.println("a小于b");
        }else{//条件都不满足时执行的代码
            System.out.println("a与b相等");
        }
    }
}

注意事项

1.else匹配时,跟最近的if语句匹配。if else语句可以不加大括号,但是这种情况只能写一行代码,建议都加上大括号,可阅读性和效率高是检验代码好不好的重要标准。

public class TestDemo {
    public static void main(String[] args) {
        int x = 10;
        int y = 10;
        if (x == 10)
            if (y == 10)
                System.out.println("hello");
            else
                System.out.println("hi");
        }
}

2.还需要注意的是,if()后面不能加分号,加分号会导致分号成为if语句中执行的代码

2.switch语句

用法展示

public class TestDemo {
    public static void main(String[] args) {
        int day = 1;
        switch (day) {//switch里的内容可以有:整数、枚举、字符、字符串
            case 1://根据 switch 中值的不同,会执行对应的 case 语句。遇到 break 就会结束该 case 语句
                System.out.println("星期一");
                break;//执行代码后跳出程序,防止继续运行下去
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期天");
                break;
            default://如果 switch 中的值没有匹配的 case,就会执行 default 中的语句,建议switch语句都加上default
                System.out.println("请输入1-7有效数字!");
                break;
        }
    }
}

注意事项

1.不要忘记break!!!如果不写break,程序会一直运行下去,从而失去了多分支选择的效果

public class TestDemo {
    public static void main(String[] args) {
        int day = 1;
        switch (day) {
            case 1:
                System.out.println("星期一");

            case 2:
                System.out.println("星期二");

            default:
                System.out.println("请输入1-7有效数字!");
              
        }
    }
}

2.注意switch语句里面的类型:整数、枚举、字符、字符串,类型不对程序将无法运行

3.switch不能表达复杂的条件,这是它的一个局限性,例如num > 10 && num < 20

4.switch语句虽然支持嵌套,但是嵌套起来代码并不易读,所以建议不要使用

三.循环结构

1.while循环

用法展示

public class TestDemo {//以1-10的和为例
    public static void main(String[] args) {
        int n = 0;
        int sum = 0;
        while(n<10){//当n<10时执行下面的代码
            n += 1;
            sum += n;
        }
        System.out.println(sum);
    }
}

注意事项

1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句。建议还是加上 { }

2. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行

3.一定要注意代码的终止条件!如果没有终止条件,代码会陷入死循环

break和continue的用法

1.break:让循环提前结束,需要注意的是,break只能结束离它最近的循环,无法结束所有循环

2.continue:跳过这次循环, 立即进入下次循环

2.for循环

用法展示

public class TestDemo {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("sum = " + sum);
    }
}

注意事项(与while循环相似)

1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句。建议还是加上 { }

2. 和 if 类似, for后面不要多写 分号, 否则可能导致循环不能正确执行

3.do while循环

用法展示

public class TestDemo {
    public static void main(String[] args) {
        int n =0;
        int sum = 0;
        do {
            n++;
            sum += n;
        }while(n!=10);//先循环一次再判断条件
        System.out.println(sum);
    }
}

注意事项

1.do while循环一般不常用,建议使用while循环或者for循环

2.while后面有个分号千万别忘了!!

四.输入和输出

1.输出到控制台

public class TestDemo {
    public static void main(String[] args) {
        System.out.println("hello"); // 输出一个字符串, 带换行
        System.out.print("hello"); // 输出一个字符串, 不带换行
        System.out.printf("%d", 1123); // 类似c语言中的printf
    }
}

2.从键盘输出

用法展示1

用 Scanner 读取字符串/整数/浮点数

import java.util.Scanner; // 需要导入 util 包
public class TestDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        String name = scanner.nextLine();
        System.out.println("请输入你的年龄:");
        int age = scanner.nextInt();
        System.out.println("请输入你的工资:");
        float salary = scanner.nextFloat();
        System.out.println("你的信息如下:");
        System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
        scanner.close(); // 注意, 要记得调用关闭方法
    }
}

用法展示2

使用 Scanner 循环读取 N 个数字

import java.util.Scanner; // 需要导入 util 包
public class TestDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double sum = 0.0;
        int num = 0;
        while (scanner.hasNextDouble()) {//连续读取多个数字
            double tmp = scanner.nextDouble();
            sum += tmp;
            num++;
        }
        System.out.println("sum = " + sum);
        System.out.println("avg = " + sum / num);
        scanner.close();
        //当输入多个对象时,使用ctrl+d/z停止输入数据
    }
}

注意事项

直接使用 System.in.read 可以读入一个字符。 但是需要搭配异常处理,用法比较麻烦,这里不作说明。

五.练习

学习完的朋友可以适当练习增加熟练度,以下是笔者的解法,如有更好的解法欢迎交流。如有错误请斧正,谢谢大家

1.打印年龄

//1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();
        if(0<=age && age<=18){
            System.out.println("少年");
        }else if(18<age && age<=28){
            System.out.println("青年");
        }else if(28<age && age<=55){
            System.out.println("中年");
        }else if(age>55){
            System.out.println("老年");
        }else{
            System.out.println("请重新输入");//当输入数据错误时
        }

        scanner.close();
    }
}

2.判断素数

import java.util.Scanner;
public class Test2 {
    public static void main(String[] args) {
        System.out.println("请输入一个数:");
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        for (int i = 2; i <x ; i++) {
            if(x%i==0){
                System.out.println(x+"不是素数");
                break;//已经确定不是素数,不用继续计算
            }else{
                System.out.println(x + "是素数");
                break;
            }
        }
        scanner.close();
    }
}

3.打印素数

//3. 打印 1 - 100 之间所有的素数
//ps:打印素数!不是打印非素数
public class Test3 {
        public static void main (String []args){
            int i=0;
            int j=0;
            for (i=1;i<=100;i++){//里面不能写int i,因为已经定义过i了
                for(j=2;j<i;j++){
                    if(i%j==0){
                        break;
                    }
                }
                if(j==i){
                    System.out.println(i + " ");
                }
            }
        }
}

4.输出闰年

public class Test4 {
    public static void main(String[] args) {
        for (int year = 1000; year <=2000 ; year++) {
            if(year%100!=0){
                if(year%4==0){
                    System.out.println(year+"是闰年!");
                }
            }else if(year%400==0){
                System.out.println(year+"是闰年!");
            }
        }
    }
}

5.打印乘法口诀表

public class Test5 {
    public static void main(String[] args) {
        int x = 0;//定义乘积
        for (int i = 1; i <=9; i++) {
            for (int j = 1; j <=i ; j++) {
                x=i*j;
                System.out.print(j+"*"+i+"="+x+"\t");//使用水平制表符对齐操作
                if(j==i){//当i=j时,进行换行操作
                 System.out.println();
             }
            }
        }
    }
}

6.找出最大公约数

//6. 求两个正整数的最大公约数
//Q: 怎么只打印最大的公约数——使用辗转相除法
import java.util.Scanner;
public class Test6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入两个正整数:");
        int x = scanner.nextInt();
        int y = scanner.nextInt();
        //除了用do while循环 也能用while循环
        do{
            int i=x%y;
            x = y;//除数赋值为被除数
            y = i;//余数赋值给除数,直到余数为0
        }while(y!=0);//直到y=0时停止运行
        System.out.println(x);
        scanner.close();
    }
}

7.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

public class Test7 {
    public static void main(String[] args) {
        double sum = 0.0;
        int flg=1;
        for (int i = 1; i <=100; i++) {
            sum = sum+ flg*1.0/i ;
            flg=-flg;
        }
        System.out.println(sum);
    }

    public static void main1(String[] args) {
        double sum1=0.0;
        double sum2=0.0;
        for (int i = 1; i <=100 ; i++) {
            if(i%2==0){
                double m = -1.0/i;
                sum1 += m;
            }else{
                double n = 1.0/i;
                sum2 += n;
            }
        }
        double sum = sum1+sum2;
        System.out.println(sum);
    }
}

8.统计数字9

public class Test8 {
    public static void main(String[] args) {
        int count = 0;
        for (int i = 1; i <=100 ; i++) {
            if(i%10 == 9){//先计算个位数是9的情况
                count++;
            }if(i/10 == 9){//再计算十位数是9的情况,不能加else,会排除99的情况,99个位数十位数均为9
                count++;
            }
        }
        System.out.println(count);
    }
}

9.计算水仙花数

public class Test9 {
    public static void main(String[] args) {
        for (int i = 100; i <=999 ; i++) {
            int c = i%10;//计算个位
            int b = (i%100-c)/10;//计算十位
            int a = i/100;//计算百位
            int m = a*a*a + b*b*b + c*c*c;//符合水仙花数的条件
            if(i == m){
                System.out.println(i);
            }
        }
    }
}

10.模拟输密码场景

import java.util.Scanner;
public class Test10 {
    public static void main(String[] args) {
        int count = 3;
        while(count!=0) {
            System.out.println("请输入你的密码:");
            Scanner scanner = new Scanner(System.in);
            String password = scanner.nextLine();
            if (password.equals("200267")) {//注意这里是用.equals()来判断字符串是否相等
                System.out.println("登陆成功!");
                return;//密码输入成功后不再执行

                scanner.close();
            } else {
                count--;
                System.out.println("密码错误,还可以输入:" + count + "次");
            }
        }
    }
}

11.返回参数二进制中1的个数

public class test11 {
    public static void main(String[] args) {
        System.out.println(func(15));
    }

    public static int func(int n){
        int count = 0;
        while(n!=0){
            count++;
            n = n & (n-1);
        }
        return count;
    }
}

原理如图

12. 获取一个数二进制序的所有奇、偶数位

//12.获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
public class Test12 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数字:");
        int n = scanner.nextInt();

        System.out.println("偶数序列为");
        for (int i = 31; i >0 ; i-=2) {
            System.out.print((n>>i)&1);//这里采用不换行输出
            System.out.print(" ");
        }

        System.out.println();

        System.out.println("奇数序列为:");
        for (int i = 30; i >=0 ; i-=2) {
            System.out.print((n>>i)&1);
            System.out.print(" ");
        }

        scanner.close();
    }
}

13. 输出整数的每一位

//13.输出一个整数的每一位.
import java.util.Scanner;
public class Test13 {//使用递归实现
    public static void main(String[] args) {
        System.out.println("请输入一个整数:");
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        print(num);

        scanner.close();
    }

    public static void print(int n){
        if(n>9){
            print(n/10);
        }
        System.out.print(n%10+" ");
    }
}

14.猜数字游戏

import java.util.Random;
import java.util.Scanner;
public class Test14 {
    public static void main(String[] args) {
        Random random = new Random();//默认随机种子是系统时间
        int num = random.nextInt(100);//
        while(true) {
            System.out.println("请输入1-100中的一个数字:");
            Scanner scanner = new Scanner(System.in);
            int ans = scanner.nextInt();
            if (ans > num) {
                System.out.println("猜大了!");
            } else if (ans < num) {
                System.out.println("猜小了!");
            } else {
                System.out.println("恭喜你!猜对了!");
                break;
            }
            scanner.close();
        }

    }
}

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ViolentAsteroid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值