目录
1.分支结构
1.1 if语句
栗子
判断奇数还是偶数
判断一个年份是否为闰年
1.2switch语句
栗子
2. 循环结构
2.1while 循环
栗子
2.2break和continue
break
continue
2.3for循环
基本语法
栗子
2.4 do while 循环
3.输入输出
3.1输出
3.2从键盘输入
栗子
3.3猜数字游戏实现
4.练习
4.1 判定一个数字是否是素数
4.2求两个数的最大公约数
4.3求水仙花数
4.4求二进制的个数
1.分支结构
1.1 if语句
if(布尔表达式){ // 语句 }
如果布尔表达式结果为true,执行if中的语句,否则不执行。
if(布尔表达式){ // 语句1 }else{ // 语句2 }
如果布尔表达式结果为true,则执行if中语句,否则执行else中语句。
栗子
判断奇数还是偶数
int num = 10; if (num % 2 == 0) { System.out.println("num 是偶数"); } else { System.out.println("num 是奇数"); }
判断一个年份是否为闰年
int year = 2000; if (year % 100 == 0) { // 判定世纪闰年 if (year % 400 == 0) { System.out.println("是闰年"); } else { System.out.println("不是闰年"); } } else { // 普通闰年 if (year % 4 == 0) { System.out.println("是闰年"); } else { System.out.println("不是闰年"); } }
1.2switch语句
基本语法
switch(表达式){ case 常量值1:{ 语句1; [break;] } case 常量值2:{ 语句2; [break;] } default:{ 内容都不满足时执行语句; [break;] } }
执行流程:
1. 先计算表达式的值
2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
3. 当表达式的值没有与所列项匹配时,执行default
栗子
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、char、short、int,注意不能是long类型
引用类型:String常量串、枚举类型
2. 循环结构
2.1while 循环
语法格式
while(循环条件){ 循环语句; }
循环条件为 true, 则执行循环语句; 否则结束循环
栗子
//分别计算100内所有奇数、偶数的和 int i = 1; int sumodd = 0; int sumeven = 0; while(i <= 100) { //首先判断是奇数 //然后进行累加求和。 if(i % 2 == 0)//偶数对二求余必为0 { sumeven += i; } else { sumodd += i; } i ++;//每轮i都要进行++ } //求和完成,打印数据 System.out.println("偶数和 = "+ sumeven); System.out.println("奇数和 = "+ sumodd);
注意事项
1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.
3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.
int num = 1; while (num <= 10); {//这里有个分号 System.out.println(num); num++; } // 执行结果 [无任何输出, 程序死循环]
2.2break和continue
break
功能是让循环提前结束.
//区分break和continue int j = 1; while(j <= 5) { if(j == 2) { break;//当j=2时候, } System.out.println(j); //这里只会输出1就结束了。 }
continue
continue 的功能是跳过这次循环, 立即进入下次循环.
int j = 1; while(j <= 5) { if(j == 2) { continue;//会进入死循环,永远停留在j=2 } System.out.println(j); }
2.3for循环
基本语法
for(表达式①;布尔表达式②;表达式③){ 表达式④; }
表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
表达式2: 循环条件,满则循环继续,否则循环结束
表达式3: 循环变量更新方式
栗子
计算 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);
2.4 do while 循环
【基本语法】
do{ 循环语句; }while(循环条件);
先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束。
do while 循环最后的分号不要忘记
3.输入输出
3.1输出
基本语法
System.out.println(msg); // 输出一个字符串, 带换行 System.out.print(msg); // 输出一个字符串, 不带换行 System.out.printf(format, msg); // 格式化输出
println 输出的内容自带 \n, print不带 \n
printf 的格式化输出方式和 C 语言的 printf 是基本一致的.
System.out.println("hello world"); int x = 10; System.out.printf("x = %d\n", x)
3.2从键盘输入
使用 Scanner 读取字符串/整数/浮点数
import java.util.Scanner; // 需要导入 util 包 Scanner sc = new Scanner(System.in); sc.close(); // 注意, 要记得调用关闭方法
栗子
import java.util.Scanner; // 需要导入 util 包 Scanner sc = new Scanner(System.in); //接下来就可以使用输入了 /* System.out.println("请输入你的id"); String name = scan.next();//next只读有效的字符,遇到空格、tab、enter键,那么就会停止结束。 System.out.println(name);*/ //输入字符串 /*ystem.out.println("请输入你的id"); String name = scan.nextLine();//nextLine 输入字符串,遇到enter才结束 System.out.println(name);*/ //输入整型 /*System.out.println("请输入你的年龄"); int ax = scan.nextInt();//只会录入空格前的,遇到空格、tab、enter键就停止了 System.out.println(ax); //也可以进行循环输入 //循环结束用ctrl+d while(scan.hasNextInt())//就是如果有数字的输入就不会停止 //想停止两方法,ctrl+d,还有输入其他字符,不是数字的内容。 { int age = scan.nextInt(); System.out.println(age); } scan.close();//这个就是类似于文件操作的关闭,有打开那就有关闭。*/
3.3猜数字游戏实现
游戏规则:
系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 "低 了", 如果输入的数字比该随机数大, 提示 "高了" , 如果输入的数字和随机数相等, 则提示 "猜对了" .
import java.util.Random; import java.util.Scanner;; class Test { public static void main(String[] args) { Random random = new Random(); // 默认随机种子是系统时间 Scanner sc = new Scanner(System.in); int toGuess = random.nextInt(100); // System.out.println("toGuess: " + toGuess); while (true) { System.out.println("请输入要输入的数字: (1-100)"); int num = sc.nextInt(); if (num < toGuess) { System.out.println("低了"); } else if (num > toGuess) { System.out.println("高了"); } else { System.out.println("猜对了"); break; } } sc.close(); } }
4.练习
4.1 判定一个数字是否是素数
有两方法 其一,就是通过循环一个数一个数的对x求余,当余数等于0,那么就不是素数,只有大于开根号数时候才是 比如16 ,可以写成1*16 2*8 4*4 ,其中2小于16开根号,那么就不是素数// i = 2; //从二开始,因为每个数都能被1整除,所以1毫无意义 for(i = 2 ;i <= Math.sqrt(num) ; i++ ) { if(num % i == 0 ){ break;//不是素数,1和2不是素数 } } if( i > Math.sqrt(num)){ //如果i大于Math.sqrt(num),那么就是素数 System.out.println(num + "是素数"); }
4.2求两个数的最大公约数
//就是用转转相除法比如 18 和 24 最大公约数就是6 //过程,24 % 18 = 6,然后下一步就是进行判断,如果18 % 6 = 0,那么6就是最大公约数 int a = scan.nextInt(); int b = scan.nextInt(); int c = a % b; while( c != 0) { a = b;//这里是防止a<b吧 b = c; c = a % b; } System.out.println(b);
4.3求水仙花数
//栗子 i= 153 = 1^3+5^3+3^3 //先求这个数是几位数 //然后再次循环求出这个数的每一位数取出来 /*for(int i = 1 ; i <= 999999 ;i ++) { int count = 0; int tmp = i; while(tmp != 0){ count ++; //一次除去10,每次去掉一位数 tmp = tmp / 10; } //计算完再进行重新赋值 tmp = i ; int sum = 0;//用于求和 while(tmp != 0){ sum+=Math.pow(tmp % 10,count);//这个函数就是传两个参数,然后进行相乘, (2,3)=2*3 tmp /= 10;//每次去掉最后一位 } if(sum == i) { System.out.println(i); } }
4.4求二进制的个数
//求二进制的个数 int ax =scan.nextInt(); int count = 0;//用来记录二进制中1的个数 //用求二进制的方法来求1的个数;对2取余,余1的话就说明二进制中有个1,然后除以二,在取余,直到除2之后为0 while (ax > 0) { if (ax%2==1) { count++; ax /= 2; } else { ax /= 2; } } System.out.println(count);