【前言】:本篇主要以代码举例的形式来讲解顺序结构、分支结构、循环结构以及输入输出的方式,最后写了一个猜数字游戏,并用画图的方式简单说了一下idea的调试方式,旁观者清,如发现有错误,请及时评论或私信指正,欢迎来访!!!
顺序结构
按照代码书写的执行顺序一行一行的执行
如:
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
aaa
bbb
ccc
如果调整代码的书写顺序, 则执行顺序也发生变化
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
aaa
ccc
bbb
分支结构
if 语句
基本语法形式1:单分支
if(布尔表达式){
}
代码示例:
public static void main(String[] args) {
int a = 10;
if (a == 10) {
System.out.println(a);
}
}
基本语法形式2:双分支
if(布尔表达式){
}else{
}
代码示例1:判断一个数是奇数还是偶数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.println(a);
if (a % 2 == 0) {
System.out.println("a是偶数");
} else {
System.out.println("a是奇数");
}
}
1).Scanner scanner = new Scanner();输入一个整数的固定写法,使用Scanner需要导包(import java.util.Scanner),他这个包一般都会自动导入,这个包类似于C语言的include 2).scanner:是我们自己设置的变量 3)System.in:从键盘获取数据 4)不知道Scanner在哪个包底下怎么办?查帮助手册
代码示例2:判段某一年份是否是闰年
public static void main4(String[] args) {
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println("这一年是闰年");
} else {
System.out.println("这一年不是闰年");
}
}
闰年
普通闰年:公历年份是4的倍数的,且不是100的倍数(year % 4 == 0 && year % 100 != 0 ),为普通闰年(如2004年、2020年就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数(year % 400 == 0)才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年)。
基本语法形式3:多分支
if(布尔表达式){
}else if(布尔表达式){
}else{
}
代码示例3:判断一个数字是正数还是负数
public static void main3(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if (num > 0) {
System.out.println("num为正数");
} else if (num < 0) {
System.out.println("num为负数");
} else {
System.out.println("num既不是正数也不是负数");
}
}
注意事项: 悬垂 else 问题
public static void main5(String[] args) {
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("ccc");
}
运行结果:
1)结论:else只会和与它最接近的if匹配 2)为避免悬垂 else 问题出现:建议加上大括号,if…else语句不加大括号只能写一条语句。 3)注意:java代码风格是将左大括号与if/else 放在同一行
switch语句
基本语法
switch(整数|枚举|字符|字符串){
case 内容1 : {
内容满足时执行语句;
[break;]
}
case 内容2 : {
内容满足时执行语句;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
代码示例:
public static void main6(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
switch (a) {
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
break;
default:
System.out.println("输入有误");
break;
}
}
代码示例4: 根据 day 的值输出星期
public static void main6(String[] args) {
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;
}
}
代码分析:根据 switch 中值的不同, 会执行对应的 case 语句. 遇到 break 就会结束该 case 语句.
如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句,建议一个 switch 语句最好都要带上 default.
注意事项:
1)在Java语言当中不能做switch的参数的数据类型有哪些? long、float、double、boolean 2)不写 break 的时候, case 语句会依次向下执行, 从而失去了多分支的效果. 3)switch中的值只能是整数、枚举、字符、字符串 switch 不能表达复杂的条件如:(num > 10 && num < 20)
循环结构
while循环
基本语法格式:
while(循环条件){
循环语句;
}
循环条件为true,则执行循环语句,否则结束循环
代码示例5:打印1~9的数字
public static void main(String[] args) {
int num = 1;
while (num != 10) {
System.out.println(num);
num++;
}
}
代码示例6:计算1~100的和
public static void main10(String[] args) {
int i = 1;
int sum = 0;
while (i <= 100) {
sum += i;
i++;
}
System.out.println(sum);
}
代码示例7:计算1~100的奇数和,偶数和
public static void main11(String[] args) {
int sumOdd = 0;
int sumEve = 0;
int i = 1;
while (i <= 100) {
sumOdd += i;
i += 2;
}
System.out.println(sumOdd);
i = 2;
while (i <= 100) {
sumEve += i;
i += 2;
}
System.out.println(sumEve);
}
打印结果:
代码示例8:计算n的阶乘
public static void main12(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int ret = 1;
int i = 1;
while (i <= n) {
ret *= i;
i++;
}
System.out.println(ret);
}
运行结果:
代码示例9:求1!+2!+3!+4!+5!(1~n)的阶乘的和
public static void main13(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int sum = 0;
int j = 1;
while (j <= n) {
int ret = 1;
int i = 1;
while (i <= j) {
ret *= i;
i++;
}
sum = sum + ret;
j++;
}
System.out.println(sum);
}
打印结果:
注意事项
1).和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { } 2).和 if 类似, while 后面的 { 建议和 while 写在同一行. 3).和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行
break
break 的功能是让循环提前结束.
代码示例:
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
if (i == 6) {
break;
}
System.out.println(i);
i++;
}
}
代码示例10: 找到 100 - 200 中第一个 3 的倍数
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;
}
num++;
}
}
打印结果:
continue
continue 的功能是跳过这次循环, 立即进入下次循环.
代码示例11: 找到 100 - 200 中所有3 的倍数
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++;
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
}
执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句
代码示例12:找到 1~100之间既能被3整除又能被5整除的数字
public static void main16(String[] args) {
int i = 1;
while (i <= 100) {
if (i % 3 != 0 || i % 5 != 0) {
i++;
continue;
}
System.out.println(i);
i++;
}
}
public static void main17(String[] args) {
int i = 1;
while (i <= 100) {
if (i % 15 != 0) {
i++;
continue;
}
System.out.println(i);
i++;
}
}
打印结果:
for 循环
基本语法
for(表达式1;表达式2;表达式3){
循环体;
}
代码示例13:打9印1到9的数字
public static void main18(String[] args) {
for(int i=1;i<=10;i++){
System.out.println(i);
}
}
代码示例14:计算1-100的和
public static void main19(String[] args) {
int i=0;
int sum=0;
for(i=1;i<=100;i++){
sum+=i;
}
System.out.println(sum);
}
代码示例15:计算1!+2!+3!+4!+5!
public static void main21(String[] args) {
int sum=0;
int i=1;
for(i=1;i<=5;i++){
int ret=1;
for(int j=1;j<=i;j++){
ret*=j;
}
sum+=ret;
}
System.out.println("result="+sum);
}
运行结果:
do while循环
基本语法
do{
循环语句;
}while(循环条件);
代码示例:
public static void main(String[] args) {
int i=0;
do{
System.out.println("至少执行一次:"+"hehe haha");
}while(i!=0);
}
打印结果:
注意: do…while循环:至少会执行一次 do while 循环最后的分号不要忘记
输入输出
输出到控制台
基本语法
System.out.println(msg);
System.out.print(msg);
System.out.printf(format, msg);
代码示例:
public static void main23(String[] args) {
String msg="hello";
String format="world";
System.out.println(msg);
int a=10;
System.out.printf("a=%d\n",a);
System.out.print(msg);
System.out.printf(format, msg);
}
打印结果:
格式化字符串
转换符 | 类型 | 举例 | |
---|
d | 十进制整数 | ("%d", 100) | 100 | x | 十六进制整数 | ("%x", 100) | 64 | o | 八进制整数 | ("%o", 100) | 144 | f | 定点浮点数 | ("%f", 100f) | 100.000000 | e | 指数浮点数 | ("%e", 100f) | 1.000000e+02 | g | 通用浮点数 | ("%g", 100f) | 100.000 | a | 十六进制浮点数 | ("%a", 100) | 0x1.9p6 | s | 字符串 | ("%s", 100) | 100 | c | 字符 | ("%c", 1) | 1 | b | 布尔值 | ("%b", 1) | true | h | 散列码 | ("%h", 100) | 64 | % | 百分号 | ("%d.2f%%", 2/7f) | 0.29% |
从键盘输入
读入一个字符 (选学)
public static void main24(String[] args) {
System.out.println("输入一个字符:");
char i= 0;
try {
i =(char)System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("你输入的字符是:"+i);
}
Scanner:输入工具类
public static void main25(String[] args) {
Scanner scanner=new Scanner(System.in);
String str2=scanner.nextLine();
System.out.println(str2);
byte b=scanner.nextByte();
System.out.println(b);
float f=scanner.nextFloat();
System.out.println(f);
String str1=scanner.next();
System.out.println(str1);
}
运行结果:
注意:如果输入与类型不匹配时会报错
用Scanner循环读入n个数字不结束,想要结束使用ctrl+D
public static void main26(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextInt()){
int a=scanner.nextInt();
System.out.println(a);
}
}
运行结果:
猜数字游戏
游戏规则: 系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 “低 了”, 如果输入的数字比该随机数大, 提示 “高了” , 如果输入的数字和随机数相等, 则提示 “猜对了” .
public static void main28(String[] args) {
Scanner scanner=new Scanner(System.in);
Random random=new Random(22);
int rand=random.nextInt(100)+1;
while(true) {
System.out.println("请输入数字:");
int num=scanner.nextInt();
if (num < rand) {
System.out.println("低了");
} else if (num > rand) {
System.out.println("高了");
} else {
System.out.println("等于");
break;
}
}
}
}
运行结果:
程序的调试
画图解说:
|