Java-程序逻辑控制

目录

一.顺序结构

二.分支结构

1.if语句

用法展示1-基本用法

用法展示2-多分支情况

注意事项

2.switch语句

用法展示

注意事项

三.循环结构

扫描二维码关注公众号,回复: 13716061 查看本文章

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();
        }

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_55752048/article/details/120866575