文章目录
Java基础语法(四)——程序逻辑控制
本次介绍内容大纲:
一、顺序结构
1.什么是顺序结构?
程序按照我们代码的书写顺序一行一行的执行,如果调整代码的书写顺序, 则执行顺序也发生变化
2.顺序结构的示例
下面我将举两个代码的示例,带大家了解一下顺序结构的具体使用
代码一:
编译实现效果:
按照我们所想的那样,顺序结构按照我们代码书写顺序,一行一行执行代码。打印出 I like Beijng
如果我们改变打印顺序,在顺序结构下代码的执行又是如何实现的呢?
代码二:
编译实现效果:
当我们改变代码的顺序,那么执行时按照顺序结构,打印的内容也会随之而改变。
二、选择结构
1. if 语句
(1)基本书写格式
书写格式一
书写格式二
书写格式三 ----多分支的情况
这里的三种书写规范,代表了 if 语句的多种情况。我们可以根据实际情况进行自主选择。
好了,接下来我们进行几道选择语句的练习编程题目.
(2) 练习
练习一
题目要求:
判断奇偶数
代码实现:
public class Main {
//判断奇偶数
public static void main(String[] args) {
int num = 10;
if (num % 2 == 0) {
System.out.println("num 是偶数");
} else {
System.out.println("num 是奇数");
}
}
}
编译实现的效果:
我们使用了 if …else 语句来区分奇数、偶数,从而进行数字的奇偶判断。
练习二
题目要求:
判定一个数字是正数还是负数
代码实现:
public static void main(String[] args) {
int num = 10;
if (num > 0) {
System.out.println("num 是正数");
} else if (num < 0) {
System.out.println("num 是负数");
} else {
System.out.println("num 是 0");
}
}
编译效果实现:
这里我们就使用了多支选择语句的用法,进行三个选择时,用 if…else if…else 进行程序结构控制,达成我们想要实现的效果.
练习三
题目要求:
判定某一年份是否是闰年
代码实现:
public static void main(String[] args) {
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("是闰年");
}
}
}
编译实现效果:
我们在这个练习题中,使用了if 语句的嵌套使用,从而更方便的达成我们的题目要求.
(3)注意事项
1.悬垂 else 问题
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
if 后面可以不加上大括号,但是只能执行跟在其后面的一条语句,在这个代码中,我们视觉的看到 else 和第一个 if 相匹配 , 但是 在不加大括号的情况下,else 只和 最近的 if 相匹配.
还有,为了避免出现自己的判断错误,尽量在需要加大括号的语句全部加上大括号(不要省略).
2. 代码风格问题
// 风格1
int x = 10;
if (x == 10) {
// 满足条件
} else {
// 不满足条件
}
// 风格2
int x = 10;
if (x == 10) {
// 满足条件
}
else
{
// 不满足条件
}
在 Java 中尽管两种代码风格都是合法的,但是Java还是更推荐 风格1
{ 放在 if / else 同一行.
3. 分号问题
int x = 20;
if (x == 10); {
System.out.println("hehe");
}
// 运行结果
hehe
我们可以看到在if()之后不小心加上了;,在此处多写了一个 分号, 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块.
这样的错误我们要尽量避免.
2. switch … case 语句
(1)基本语法
(2)代码示例
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.且default的位置不固定.
(3)注意事项
注意事项1
break 不要遗漏, 否则会失去 “多分支选择” 的效果
代码示例:
public static void main(String[] args) {
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
case 3:
System.out.println("星期三");
case 4:
System.out.println("星期四");
case 5:
System.out.println("星期五");
case 6:
System.out.println("星期六");
case 7:
System.out.println("星期日");
default:
System.out.println("输入有误");
}
}
实现效果:
注意事项2
switch 中的值只能是 整数|枚举|字符|字符串
之前我们的代码示例switch()中跟的都是 int 类型的数据
那么switch()中的值可以是其他类型吗?
我们对其它类型的数据进行试验…
long
所以 switch ()中的数据不能是 long 类型
float
所以 switch ()中的数据不能是 float 类型
double
所以 switch ()中的数据不能是 double 类型
char
switch()中可以是 char 类型的数据
String
代码实现效果:
所以 switch()中的数据可以是 String 类型的.
总之,switch 中的值只能是 整数|枚举|字符|字符串.
注意事项3
switch 不能表达复杂的条件
如果是这样的代码:
这样的题目条件,明显使用 if 语句表达更为方便 , 使用 switch 语句则无法表示.
三、循环结构
循环中的关键字
break
功能: break 的功能是让循环提前结束,执行到 break 就会让循环结束,直接跳出循环
coutinue
功能: continue 的功能是跳过这次循环, 立即进入下次循环.
1.while 循环语句
(1)基本语法格式
了解了while 语句的语法结构,那么我们来进行对 while 语句的代码练习.
(2)练习
练习一
题目要求:
打印 1 - 10 的数字
代码实现:
实现效果:
练习二
题目要求:
计算 1 - 100 的和
代码实现:
实现效果:
(3)注意事项
1.和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2.和 if 类似, while 后面的 { 建议和 while 写在同一行.
3.和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.
2.for 循环语句
(1)基础语法
相比于 while 循环, for 循环将这三个部分合并在一起, 写代码时不容易遗漏.
了解了 for 语句的语法结构,那么我们来进行对 while 语句的代码练习.
(2) 练习
我们将上面两道 while 循环的练习题改成用for 循环来表示
练习一
题目要求:
打印 1 - 10 的数字
代码实现:
实现效果:
练习二
题目要求:
计算 1 - 100 的和
代码实现:
实现效果:
3.do … while 循环语句
(1)基本语法
(2)练习
打印 1 -10的数字
实现效果:
(3)注意事项
- do while 循环最后的分号不要忘记
- 一般 do while 很少用到, 更推荐使用 for 和 while.
四、输入输出的表示
1.输出到控制台
(1)基础语法
System.out.println(msg);
输出一个字符串, 带换行
System.out.print(msg);
输出一个字符串, 不带换行
System.out.printf(format, msg);
格式化输出
(2)注意点
println 输出的内容自带 \n, print 不带 \n
printf 的格式化输出方式和 C 语言的 printf 是基本一致的.
(3)格式化输出
什么是格式化输出?
将数据按以下类型(部分)进行输出:
转换符 | 类型 | 举例 |
---|---|---|
d | 十进制整数 | ( “%d” ,10) |
x | 十六进制整数 | ("%x", 100) |
f | 单精度浮点数 | ("%f",100.0) |
s | 字符串 | ("%s",“abc”) |
c | 字符 | ("%c",‘1’) |
我们只是将部分格式化的数据列举出来,具体的格式化类型请大家自行查找.这种格式化打印在C语言中十分常见.
2.从键盘输入
(1)使用Scanner 读取字符串/整数/浮点数
首先我们需要导入 util 包
import java.util.Scanner; // 需要导入 util 包
从键盘输入一个整形:
public static void main(String[] args) {
// 输入一个整型
Scanner scanner = new Scanner(System.in);
int a=scanner.nextInt();
// 输入一个数打印一个数
System.out.println(a);
}
实现效果:
这里的 nextInt 是读取一个整形.
从键盘输入一个字符串:
public static void main(String[] args) {
// 输入一个字符串
Scanner scanner = new Scanner(System.in);
String a=scanner.nextLine();
// 输入一个字符串打印一个字符串
System.out.println(a);
}
实现效果:
这里的 nextline —— 是输入一行,且遇到空格不会中止读取
从键盘输入一个浮点数:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double a = scanner.nextDouble();
System.out.println(a);
}
实现效果:
这里的 nextDouble 是输入一个双精度浮点数 .
(2)使用 Scanner 循环读取 N 个数字
代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int a = scanner.nextInt();
System.out.println(a);
}
}
实现效果:
我们实现多组输入数字,最后ctrl + D 停止循环.
下面是hasNext 的具体使用
(3)Java输入的建议
我们根据个人信息,输入输出如下
输入的类型依次是 字符串 整形 浮点型
显示效果如下:
好,我们第二次改变输入类型的顺序.
这次我们在输入时却碰到了一个问题…
我们在输入整形数据18以后,按下回车,发现直接跳到了输入浮点型数据的内容,字符串类型直接跳过了,这样的输入就存在了问题.
我们可以当作 把在输入整形后 的回车 当成了 输入字符串类型的内容,所以跳过了输入字符串.
所以 对于 Java 的输入我们建议:把输入字符串放在最前面,字符串的前面不要输入整形或其他类型的数据.
五、猜数字游戏的实现
游戏规则:
系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 “低 了”, 如果输入的数字比该随机数大, 提示 “高了” , 如果输入的数字和随机数相等, 则提示 “猜对了”
1.编写过程
下面是Random 的使用.
好了,我们熟悉了Random 的使用,这个游戏我们首先要生成一个 在 0-100范围内的随机数
(1)生成随机数
Randnum randNum = new Random();
int randNum = Randdom.nextInt(100);
(2)输入你要猜的数字
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
(3)循环结构,进行数字比较
将你猜的数字与随机数比较,如果猜小了,打印“你猜小了”,猜大了,打印“你猜大了”,猜对了,打印“你猜对了”,然后跳出循环. 没有猜对则一直比较.
我们用while(true)来一直循环,当num== randNum 时 break跳出循环.
Scanner scanner = new Scanner(System.in);
while(true){
System.out.print("请输入要猜的数字:>");
int num = scanner.nextInt();
if(num<randNum){
System.out.println("你猜小了");
}else if(num>randNum){
System.out.println("你猜大了");
}else{
System.out.println("你猜对了");
break;
}
}
2.完整代码实现
import java.util.Random;
import java.util.Scanner;
public static void main13(String[] args) {
Scanner scan=new Scanner(System.in);
Random random = new Random();
int randNum = random.nextInt(100);
//System.out.println(randNum);
while(true){
System.out.println("请输入数字:");
int num=scan.nextInt();
if(num<randNum){
System.out.println("你猜小了");
}
else if(num==randNum){
System.out.println("你猜对了");
break;
}
else if(num>randNum){
System.out.println("你猜大了");
}
}
}
实现效果:
好了,Java基础 – 程序逻辑控制的知识就分享到这里,希望大家看完之后多多练习,感谢大家的欣赏!!!
我的Java基础入门训练有练习的题目,大家可以关注哦 !
谢谢大家的欣赏与关注!!!