目录
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);