目录
前言
我的JavaSE语法专栏地址👇,可以看看,你可能会有不一样的收获哦。
JavaSE_会飞的阿喵的博客-CSDN博客https://blog.csdn.net/che__dan/category_11970438.html?spm=1001.2014.3001.5482
✏️输入输出
1.输出到控制台
格式:
String str = "abcdefg";
System.out.println(str); // 输出一个字符串, 带换行
System.out.print(str); // 输出一个字符串, 不带换行
System.out.printf("%s",str); // 格式化输出
- println 输出的内容自带 \n(换行), print 不带 \n。
- printf 的格式化输出方式和 C 语言的 printf 是基本一致的。
2.从键盘输入
(1)使用 Scanner 读取字符串/整数/浮点数
import java.util.Scanner; // 需要导入 util 包
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
sc.close(); // 注意, 要记得调用关闭方法,也可以不用,程序结束后会自动关闭。
// 执行结果
请输入你的姓名:
张三
请输入你的年龄:
18
请输入你的工资:
1000
你的信息如下:
姓名: 张三
年龄:18
工资:1000.0
(2)使用 Scanner 循环读取 N 个数字,并求取其平均值
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
int num = 0;
//hasNextInt()是来判断你输入的是不是相应的类型,如果你输入字符串就用hasNextLine()、
//输入小数就用hasNextDouble()……
while (sc.hasNextInt()) {
int tmp = sc.nextInt();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
}
注意: 当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl+ d),在 编译环境为IntelliJ IDEA上用 ctrl+ d。
✏️顺序结构
顾名思义,就是让代码一行一行执行,非常简单。
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println(6);
//结果:
1
2
3
4
5
6
✏️分支结构
1.if语句
- 格式1:
if(布尔表达式){
// 语句
}
如果布尔表达式结果为true,执行if中的语句,否则不执行。
注意:这里区别于C语言的 if等判断语句,在Java里,括号里面不能是其它类型。比如:“if(1)” 在C语言里“ 1 ”代表真,if语句能过,但是在Java里会报错。
- 格式2:
if(
布尔表达式){
// 语句1
}else{
// 语句2
}
如果布尔表达式结果为true,则执行if中语句,否则执行else中语句。
例子1:
int grade = 90;
if (grade < 60) {
System.out.println("给你一个大嘴巴子");
} else {
System.out.println("给你一个大棒棒糖");
}
- 格式3:
if(
布尔表达式1){
// 语句1
}else if(布尔表达式2){
// 语句2
}else{
// 语句3
}
表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。
例子2:判断正负数
int sum = 8;
if (sum > 0){
System.out.println("sum是正数");
} else if(sum < 0) {
System.out.println("sum是负数");
else{
ystem.out.println("sum为0");
}
例子3:判断润年
(1)能被4整除且不能被100整除(如2004年是闰年,而1900年不是)
(2)能被400整除(如2000年是闰年)
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("不是闰年");
}
}
- if语句的易错点:
(1)分号问题
int x = 20;
if (x == 10);{
System.out.println("hehe");
}
// 运行结果
hehe
此处多写了一个 分号,导致分号成为了 if 语句的语句体,而 { } 中的代码已经成为了和一个 if 无关的代码块。
(2)悬垂 else 问题
int x = 10;
int y = 10;
if (x == 10)
if (y == 5)
System.out.println("aaa");
else
System.out.println("bbb");
//运行结果:
bbb
if、else 语句中可以不加 大括号,也可以写语句(只能写一条语句)。此时 else 是和最接近的 if 匹配。但是实际中不建议这么写,最好加上大括号。
2.switch 语句
switch语句是单条件、多分支的开关语句
格式:
switch(表达式){
case 常量值1:{
//语句1;
break;
}
case 常量值2:{
//语句2;
break;
}
default:{
//内容都不满足时执行语句;
break;
}
}
执行流程:
- 先计算表达式的值。
- 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束。
- 当表达式的值没有与所列项匹配时,执行default。
- break可以省略,但是得要看具体情况,省略的情况下,case执行后不会停下并继续往下执行,具体看下面例子。
例:使用switch语句判断用户从键盘输入的正整数是否为中奖号码。
public static void main(String[] args) {
int number = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入正整数(回车确定):");
number = in.nextInt();
switch (number) {
case 9:
case 131:
case 12:
System.out.println(number + "是三等奖");
break;
case 209:
case 596:
case 27:
System.out.println(number + "是二等奖");
case 875:
case 316:
case 59:
System.out.println(number + "是一等奖");
break;
default:
System.out.println(number + "未中奖");
break;
}
//输入:875
//输出:是一等奖
注意:
- 多个case后的常量值不可以重复。
- switch的括号内只能是以下类型的表达式,否则会报错:
基本类型:byte、char、short、int,注意不能是long类型。
引用类型:String常量串、枚举类型。
✏️循环结构
1.while 循环
格式:
while(循环条件){
//循环语句;
}
循环条件为 true,则执行循环语句;否则结束循环。
例: 计算 5 的阶乘
public static void main(String[] args) {
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(result);
}
注意:
- 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }。
- 和 if 类似, while 后面的 { 建议和 while 写在同一行。
- 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行。
2.break与continue
break 的功能是让循环提前结束,continue 的功能是跳过这次循环, 立即进入下次循环。
break例:
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;
}
num++;
}
// 执行结果找到了 3 的倍数, 为:102
}
continue例:
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
}
3.for 循环
格式:
for(表达式①;布尔表达式②;表达式③){
表达式④;
}
- 表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次。
- 表达式2: 循环条件,满则循环继续,否则循环结束。
- 表达式3: 循环变量更新方式。
例:计算 5 的阶乘
public static void main(String[] args) {
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
}
//结果:result = 120
- 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }。
- 和 if 类似, for 后面的 { 建议和 while 写在同一行。
- 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行。
- 和while循环一样,结束单趟循环用continue,结束整个循环用break。。
4.do while 循环
格式:
do{
循环语句;
}while(循环条件);
先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束。
例:打印 1 - 10
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 10);
//结果:
1
2
3
4
5
6
7
8
9
10
- do while 循环最后的分号不要忘记。
- 一般 do while 很少用到, 更推荐使用 for 和 while。
✏️猜数字游戏
规则:系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字。如果输入的数字比该随机数小, 提示 "低了", 如果输入的数字比该随机数大, 提示 "高了" , 如果输入的数字和随机数相等, 则提示 "猜对了" 。
public static void main(String[] args) {
Random random = new Random(); // 默认随机种子是系统时间
Scanner sc = new Scanner(System.in);
int toGuess = random.nextInt(100);//范围是[0,100)
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();
}