Java基础语法详解:逻辑控制与输入输出
本文系统讲解Java基础语法中的逻辑控制与输入输出机制。详细解析顺序、分支(if/switch)及循环(while/for/do-while)结构,重点对比Java与C语言在条件表达式类型及语法风格上的差异。同时介绍System.out输出、Scanner类读取各类数据及处理换行符的技巧,并通过猜数字游戏实例展示Random类的实际应用。
一、逻辑控制语句
1. 顺序结构
代码执行时默认按照从上到下的顺序逐行运行,这种机制称为顺序结构。执行顺序的不同会直接导致最终结果产生差异。例如:
System.out.println(1) System.out.println(2) System.out.println(3)
上述代码的输出结果为 1(换行)2(换行)3,但如果调整代码执行顺序,结果将发生变化:
System.out.println(2) System.out.println(3) System.out.println(1)
此时代码输出结果变为 2(换行)3(换行)1
2. 分支结构
2.1 if 语句
与 C 语言类似,Java 中的 if 语句同样包含三种基本形式:
形式一
if(布尔表达式){
// 条件满足时执行的代码
}
形式二
if(布尔表达式){
// 条件满足时执行的代码
}else{
// 条件不满足时执行的代码
}
形式三
if(布尔表达式1){
// 条件1满足时执行的代码
}else if(布尔表达式2){
// 条件2满足时执行的代码
}else{
// 条件都不满足时执行的代码
}
尽管形式相似,但 Java 与 C 语言在细节上存在显著区别:
1. 条件表达式必须为布尔类型,不能像 C 语言那样直接使用数值作为条件,例如:
int a = 10;
if(a){
System.out.println(a);
}
此类代码在 Java 中是非法的,因为条件必须是布尔值。
int a = 10;
if(a > 0){
System.out.println(a);
}
而以下代码则是正确的:
2. 代码风格方面,虽然 C 语言中常将大括号置于行首,但 Java 更推荐将左大括号 { 放在 if 或 else 的同一行,如上述三种形式所示。
3. 需注意“悬垂 else”问题,即 else 总是与离它最近的未匹配的 if 配对。例如:
int a = 2;
if(a>0)
if(a>10)
System.out.println("a > 10");
else
System.out.println("a > 0 && a <= 10");
在此示例中,最下方的 else 是与它最近的 if 进行匹配的。
2.2 switch 语句
Java 中的 switch 语句与 C 语言高度相似,若对 switch 及相关逻辑结构不熟悉,可参考相关的 C 语言注意事项。但两者并非完全一致,主要区别在于:
在 Java 中,switch(表达式) 对表达式的类型有严格限制。
它仅支持以下类型:整数(包括 byte、short、int)、字符(char)、字符串(String)以及枚举类型。
3. 循环结构
3.1 while 循环
Java 的 while 循环与 C 语言极为相似,唯一的区别在于:
while (表达式) 中的表达式必须为布尔值。
3.2 break
break 的作用是使包含它的最近一层循环提前结束,这一行为与 C 语言一致。
3.3 continue
continue 的功能是跳过当前循环的剩余部分,立即进入下一次循环迭代,这与 C 语言的行为相同。
3.4 for 循环
Java 中的 for 循环与 C 语言非常接近,唯一的差异在于:
for(表达式1;表达式2;表达式3) 中的表达式2作为循环判断条件,必须使用布尔值。
3.5 do while 循环
Java 的 do while 循环同样与 C 语言类似,区别在于:
while 后的循环条件必须是布尔值。
尽管语法支持,但通常不推荐使用 do while 循环,因为它至少会执行一次循环体,若不注意逻辑细节容易引发错误。
二、输入输出方式
1. 输出到控制台
1.基本语法
System.out.println(msg); // 输出一个字符串,自带换行 System.out.print(msg); // 输出一个字符串,不带换行 System.out.printf(format,msg); // 格式化输出,括号内内容类似于 C 语言的 printf
2.代码示例
int a = 10;
System.out.println(a); // 输出 a,自带换行
System.out.print(a); // 输出 a,不带换行
System.out.printf("%d\n",a); // 格式化输出,括号内内容类似于 C 语言的 printf
3.格式化输出表(随用随查)
| 转换符 | 类型 | 例子 | 输出结果 |
|---|---|---|---|
| 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 | 字符 | ("%d",‘1') | 1 |
| b | 布尔值 | ("%b",100) | true |
| h | 散列码 | ("%h",100) | 64 |
| % | 百分号 | ("%.2f%%",2/7f) | 0.29% |
2. 从键盘输入
1.读入一个字符(不推荐使用)
直接使用 System.in.read() 可以读取一个字符,但必须配合异常处理。若未处理异常,如下代码会导致编译错误:
public static void main(String[] args) {
System.out.print("Enter a char:");
char i = (char)System.in.read();
System.out.println("The char is :" + i);
}
解决方法是将鼠标悬停在 read 上,然后按住 Alt + Enter 键,此时会弹出操作选项:

点击第一个或第二个选项即可消除报错。这实际上是自动处理了异常,但由于简单读取字符需如此复杂的操作,因此不推荐使用此方法。
2.使用 Scanner 读取字符/字符串/整数/浮点数/布尔值
1. 首先需导入 util 包:import java.util.Scanner;。在 IDEA 中,输入 Scanner 后直接回车即可快速导入。
2. 接着构造一个 Scanner 对象并将其与“标准输入流” System.in 关联:Scanner 对象名 = new Scanner(System.in);
3. 随后即可通过 Scanner 类的各种方法实现输入操作:
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt(); //读入一个整数
double b = in.nextDouble(); //读入一个浮点数
boolean c = in.nextBoolean(); //读入一个布尔值
String s = in.next(); //读入一个字符串
}
}
需要注意的是,上述读取字符串的方法以空白符为分隔符,因此只能读取第一个空格前的内容。若要读取包含空格的一整行字符,应使用:
String s = in.nextLine();
然而该方法存在缺陷:若该行代码前有其他读取语句,它可能会读取到前一行留下的回车符,导致直接结束。因此,该语句应置于所有读取代码的首位,或在其前添加:
in.nextLine();
用于消耗掉之前的回车符。
3. 在 C 语言中,我们可以编写如下代码来输入多组数据:
int a;
while(scanf("%d",&a) != EOF)
{
// 内容
}
在 C++ 中,类似的代码如下:
int a;
while(cin>>a)
{
// 内容
}
那么在 Java 中如何实现多组数据输入呢?代码如下:
Scanner in = new Scanner(System.in);
while(in.hasNextInt()){
int a = in.nextInt();
// 内容
}
在 IDEA 中,可通过手动输入 Ctrl + D 结束;在 Windows 的 cmd 中,需手动输入 Ctrl + Z 结束;在 Linux 或 Mac 上,则输入 Ctrl + D 结束。
三、猜数字游戏
学习 C 语言时,我们可能接触过随机数生成或直接编写猜随机数游戏。那么在 Java 中如何实现呢?
1. 首先需了解 Java 中随机数的生成方式。
1. 首先导入 util 包:import java.util.Random;。在 IDEA 中,输入 Random 后直接回车即可快速导入。
2. 然后通过 Random 类的方法生成所需随机数,例如:
import java.util.Random;
public class TestDemo {
public static void main(String[] args) {
Random random = new random(); // 默认随机种子是系统时间
int rand = random.nextInt(bound:100) + 1;
// random.nextInt(bound:100) 是生成[0,100)间的随机整数
}
}
接下来只需将用户输入的数字与随机数字进行比较,直到判断正确后退出循环即可。最终完整代码如下:
public class TestDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
int rand = random.nextInt(100) + 1;
while (true){
System.out.print("请输入你所猜测的数字:");
int num = scanner.nextInt();
if(num == rand){
System.out.println("恭喜你,猜对了!");
break;
}else if(num < rand){
System.out.println("很遗憾,你猜的数字小了!");
}else{
System.out.println("很遗憾,你猜的数字大了!");
}
}
}
}
四、总结
本文到此结束,希望能对您有所帮助,也欢迎您关注本站获取更多技术内容!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









