【前言】:本篇主要以代码举例的形式来讲解顺序结构、分支结构、循环结构以及输入输出的方式,最后写了一个猜数字游戏,并用画图的方式简单说了一下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);//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) {
//if...else语句不加大括号只能写一条语句,建议加上大括号
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) {
// int a=1;
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
switch (a) {//a是switch的参数,类型是int
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;//1~100奇数和
int sumEve = 0;//1~100偶数和
int i = 1;
while (i <= 100) {
sumOdd += i;
i += 2;
}
System.out.println(sumOdd);
i = 2;//改变i的初值
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);//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;//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整除的数字
//方法1:
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++;
}
}
//方法2:使用最小公倍数
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){ //表达式2一定是一个布尔表达式
循环体;
}
//表达式1: 用于初始化循环变量.
//表达式2: 循环条件
//表达式3: 更新循环变量.
//相比于 while 循环, for 循环将这三个部分合并在一起, 写代码时不容易遗漏.
代码示例13:打印1到9的数字
public static void main18(String[] args) {
for(int i=1;i<=9;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循环是产生1到5的数字
for(i=1;i<=5;i++){
//第二个for循环是求一个数的阶乘
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;//read报错:选到它,按住Alt+回车键,选中第二个,捕获异常
//这种太复杂,不建议使用
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();
//这里的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();//这里的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;//bound:100表示生成[0,100),需要+1生成1~100的数
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;
}
}
}
}
运行结果:
程序的调试
画图解说: