JavaSE及数据结构---逻辑控制

发布于:2023-01-13 ⋅ 阅读:(216) ⋅ 点赞:(0)

目录

1、switch 语句

2、while 循环

3、for 循环

4、输入输出

4.1 输出到控制台

 4.2 从键盘输入

5、猜数字游戏

6、练习


1、switch 语句

int day = 1; 
switch(day) 
{
    case 1: 
        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: 
        System.out.println("输入有误");
        break; 
}
注意事项
        多个case 后的常量值不可以重复
        switch的括号内只能是以下类型的表达式:
  • 基本类型:byte、charshortint,注意不能是long类型  
  • 引用类型:String常量串、枚举类型
double num = 1.0;
switch(num)
{
        case 1.0:
                System.out.println("hehe");
                break;
        case 2.0:
                System.out.println("haha");
                break;
}
编译出错
Test . java : 4 : 错误 : 不兼容的类型 : double 转换到 int 可能会有损失
switch ( num )
{
     ^
1 个错误
  • break 不要遗漏, 否则会失去 "多分支选择" 的效果
  • switch 不能表达复杂的条件

2、while 循环

        计算 1! + 2! + 3! + 4! + 5!
    public static void main7(String[] args) {
        int j = 1;
        int sum = 0;
        while (j <= 5) {
            int i = 1;
            int ret = 1;
            while (i <= j) {
                ret = ret * i;
                i++;
            }
            sum += ret;
            j++;
        }
        System.out.println(sum);
    }

3、for 循环

        计算 1! + 2! + 3! + 4! + 5!
int sum = 0; 
for (int i = 1; i <= 5; i++) 
{ 
    int tmp = 1; 
    for (int j = 1; j <= i; j++) 
    { 
        tmp *= j; 
    }
    sum += tmp; 
}
System.out.println("sum = " + sum);

4、输入输出

4.1 输出到控制台

System . out . println ( msg );            // 输出一个字符串 , 带换行
System . out . print ( msg );               // 输出一个字符串 , 不带换行
System . out . printf ( format , msg ); // 格式化输出
  • println 输出的内容自带 \n, print 不带 \n
  • printf 的格式化输出方式和 C 语言的 printf 是基本一致的. \
    public static void main15(String[] args) {
        System.out.println("输出且换行!");
        System.out.print("输出且不换行!");
        System.out.printf("%s\n","真的没换行吗?");
    }

 4.2 从键盘输入

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

    public static void main16(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入你的姓名:");
        String str = scanner.nextLine();
        System.out.println(str);

        System.out.println("请输入你的年龄:");
        int age = scanner.nextInt();
        System.out.println(age);

        System.out.println("请输入你的工资:");
        float money = scanner.nextFloat();
        System.out.println(money);
    }

        使用 Scanner 循环读取 N 个数字,并求取其平均值

Scanner sc = new Scanner ( System . in );
int sum = 0 ;
int num = 0 ;
while ( sc . hasNextInt ())
{
int tmp = sc . nextInt ();
sum += tmp ;
num ++ ;
}
System . out . println ( "sum = " + sum );
System . out . println ( "avg = " + sum / num );
sc . close ();
// 执行结果
10
40.0
50.5
^Z
sum = 150.5
avg = 30.1
        注意事项: 当循环输入多个数据的时候 , 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d).

5、猜数字游戏

游戏规则:
        系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 "低了", 如果输入的数字比该随机数大, 提示 "高了" , 如果输入的数字和随机数相等, 则提示 "猜对了" .
import java.util.Random; 
import java.util.Scanner;


    public static void main18(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        int randNum = random.nextInt(101);//[0,101)==>[0,100]
        System.out.println("随机数是"+randNum);
        while (true) {
            System.out.println("请输入你要猜的数字:");
            int num = scanner.nextInt();
            if(num < randNum) {
                System.out.println("猜小了!");
            }else if(num == randNum) {
                System.out.println("猜对了!");
                break;
            }else {
                System.out.println("猜大了!");
            }
        }

    }

6、练习

根据年龄 , 来打印出当前年龄的人是少年 ( 低于 18), 青年 (19-28), 中年 (29-55), 老年 (56 以上 )
    public static void main1(String[] args) {
        Scanner scan = new Scanner(System.in);
        int age = scan.nextInt();
        if(age < 18) {
            System.out.println("少年!");
        }else if(age >= 18 && age < 28) {
            System.out.println("青年!");
        }else if(age >= 29 && age < 55) {
            System.out.println("中年!");
        }else {
            System.out.println("老年!");
        }
    }

打印 1 - 100 之间所有的素数

    public static void main(String[] args) {

        for (int j = 1; j < 101; j++) {
            //int n = 19;
            int i = 2;
            for (; i <= Math.sqrt(j); i++) {
                if(j % i == 0) {
                    break;
                }
            }
            if(i > Math.sqrt(j)) {
                System.out.println(j+" 是素数!");
            }
        }

    }
    public static boolean isPrime(int n) {
        int i = 2;
        for (; i <= Math.sqrt(n); i++) {
            if(n % i == 0) {
                //System.out.println(n+": 不是素数!");
                break;
            }
        }
        if(i > Math.sqrt(n)) {
            //System.out.println(n+": 是素数!");
            return true;
        }
        return false;
    }

    public static void main5(String[] args) {
        for (int i = 1; i < 101; i++) {
            boolean ret = isPrime(i);
            if(ret) {
                System.out.println(i+" 是素数!");
            }
        }
    }

求两个正整数的最大公约数

    public static void main(String[] args) {
        //辗转相除法
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = a%b;
        while (c != 0) {
            a = b;
            b = c;
            c = a%b;
        }
        System.out.println(b+" 是最大公约数!");
    }

求出0~999之间的所有水仙花数并输出。(“水仙花数是指一个三位数,其各位数字的立方和确好等于该数本身,如: 1531^35^33^3 ,则153是一个水仙花数)

    public static void main(String[] args) {
        for (int i = 1; i < 999999; i++) {
            int count = 0;
            int tmp = i;
            while (tmp != 0) {
                count++;
                tmp = tmp / 10;
            }
            tmp = i;
            int sum = 0;
            while (tmp != 0) {
                sum += Math.pow(tmp % 10,count);
                tmp /= 10;
            }
            if(sum == i) {
                System.out.println(i);
            }
        }
    }

写一个函数返回参数二进制中 1 的个数比如: 15 0000 1111 4 1

    public static void main(String[] args) {
        int n = 7;
        int count = 0;
        for (int i = 0; i < 32; i++) {
            if(  ((n >> i) & 1) != 0   ) {
                count++;
            }
        }
        System.out.println(count);
    }
    public static void main(String[] args) {
        int n = -1;
        int count = 0;
        while (n != 0) {
            if((n & 1) != 0) {
                count++;
            }
            n = n >>> 1;
        }
        System.out.println(count);
    }
    public static void main00(String[] args) {
        int n = -1;
        int count = 0;
        while (n != 0) {
            n = n &(n-1);
            count++;
        }
        System.out.println(count);
    }

获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。

    public static void main(String[] args) {
        int n = 7;
        for (int i = 31; i >= 1 ; i-=2) {
            //偶数位
            System.out.print(((n >> i) & 1)+" ");
        }

        System.out.println();
        for (int i = 30; i >= 0 ; i-=2) {
            //奇数位
            System.out.print(((n >> i) & 1)+" ");
        }
    }

根据输入的行数画出星号组成的图案

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextInt()) {
            int n = scan.nextInt();
            for(int i = 0;i < n;i++) {
                for(int j = 0;j < n;j++) {
                    if(i == j) {
                        System.out.print("*");
                    }else if( i+j+1 == n) {
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }

找出出现一次的数字

    public static void main(String[] args) {
        int[] array = {1,2,3,2,1};
        int sum = 0;
        for (int i = 0; i < 5; i++) {
            sum = sum ^ array[i];
        }
        System.out.println(sum);
    }

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到