键盘录入
-
1.导包:
-
import java.util.Scanner;
-
2.创建对象:
Scanner sc = new Scanner(System.in);
-
3.调用方法:
int i = sc.nextInt(); //输入数字 String s1 = sc.next();//输入字符串 String s2 = sc.nextLine();//输入字符串 !!! next() 和 nextLine() 的区别: !!! next()一定要读取到 有效字符 后才结束输入, 对之前遇到的 空格键、Tab 或Enter 等结束符会自动将其去掉 只有在输入有效字符之后,才将之后的空格键、Tab 或Enter 等视为分隔符或结束符。 简单地说,next()查找并返回来自此扫描器的下一个完整标记 完整标记的前后是与分隔模式匹配的输入信息 next方法不能得到带 空格 的字符串 nextLine()方法的结束符只是Enter键, 即nextLine()方法返回的是 Enter 之前的所有字符,它可以得到 带空格 的字符串。
流程控制
- 顺序结构
- 分支结构
- 循环结构
顺序结构
分支结构
1. if 语句
格式:
1. if(条件表达式){//条件表达式必须为 boolean 类型
语句体; // 只有一条有效语句时,可以省去 花括号
}
2. if(条件表达式){
语句体;
}else{
语句体;
}
3. if(条件表达式){
语句体;
}else if(条件表达式){
语句体;
}else if(条件表达式){
语句体;
}else{
语句体;
}
局部代码块
由一对花括号括起来的代码块。
作用:
可以让 变量 更早地在内存中消失,节省内存空间。
2. switch 语句
switch(表达式){ //表达式的类型:byte、short、int、char、String、枚举
case 值1:
语句体;
break;
case 值2:
语句体;
break;
...
default:
语句体;
break;
}
注意:
- break不写 会导致 switch穿透(因为之前匹配过一次,之后case不会二次匹配,后面的语句均会执行)
- default语句 可以放在 switch 语句内的任意行,但不管在哪一行,都只会在所有 case 后执行
- switch 的结束标记有:break 和 结尾花括号 ‘}’
循环结构
1. for循环
格式:
for(初始化条件;判断条件;控制条件){
循环语句;
}
2. while循环
格式:
初始化条件;
while(判断条件){
循环语句;
控制条件;
}
3. do-while循环
格式:
初始化语句;
do{
循环语句;
控制条件;
}while(判断语句);
死循环
- for(;😉{ }
- while(true){ }
三种循环的区别
- for 和 while 与 do…while 的区别?
- for 和 while
- 先判断,再循环和控制;
- 判断 永远比 控制 多执行一次;判断至少执行一次,
- 而控制可以一次都不执行
- do…while
- 先循环,再控制和判断
- 判断 和 控制 执行次数一致
- for 和 while
- for 与 while 各自应当在何时使用?
- 循环次数明确时:for
- 循环次数不明确时:while
跳转控制语句
break
用在 循环 和 switch 中
- switch
- 结束 switch 语句
- 循环
- 结束整个循环
continue
用在 循环 中
- 循环
- 结束本次循环,进入下一次循环
ps:在同一对花括号里,continue 和 break 后不能有任何语句;因为其后的语句不管是什么,都绝对不会执行,编译器认为这些语句是无用的、有语法错误,故其会在编译时 报错 !
练习
- 判断春夏秋冬(ifelse/swtich)
需求:键盘录入一个数(代表月份),判断该数字是哪个季节
春天:3,4,5
夏天:6,7,8
秋天:9,10,11
冬天:12,1,2
public class Test02 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个月份数:");
int i = sc.nextInt();
if(i>=3 && i<=5){
System.out.println(i + "月是春天!");
}else if(i>=6 && i<=8) {
System.out.println(i + "月是夏天!");
}else if(i>=9 && i<=11) {
System.out.println(i + "月是秋天!");
}else if(i>12 || i<=0) {
System.out.println("您输入的月份数有误!");
}else {
System.out.println(i + "月是冬天!");
}
}
}
2. 4. 判断星期数(switch)
需求:键盘录入一个数字,判断该数字是星期几
public class Test04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入0~7间的任一数字:");
int i = sc.nextInt();
switch(i) {
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;
}
}
}
3. 在控制台输出所有的水仙花数,并统计水仙花数共有多少个。
public class Test06 {//水仙花数是指每一位的立方相加等于该数自己,三位数
public static void main(String[] args) {
int sum = 0;
for(int i = 100;i < 1000;i++) {
int a = i%10;
int b = i/10%10;
int c = i/100%10;
if(i == (a*a*a) + (b*b*b) + (c*c*c)) {
sum++;
System.out.println(i + "是一个水仙花数!");
}
}
System.out.println("一共有 " + sum + " 个水仙花数");
}
}
4. 在控制台上输出一个由星星组成的等腰三角形图案
public class Test08 {
public static void main(String[] args) {
for(int i = 0;i<5;i++) {
for(int j=5;j>i;j--) {
System.out.print(" ");
}
for(int k=0;k<2*i;k++) {
System.out.print("*");
}
System.out.println("*");
}
}
}
5. .在控制台上输出九九乘法表
public class Test09 {
public static void main(String[] args) {
for(int i = 1;i<10;i++) {
for(int j=1;j<=i;j++) {
int sum = i * j;
System.out.print(j+" * "+i+" = "+sum +" ");
}
System.out.println("");
}
}
}
6. 分析以下需求,并用代码实现:
1.打印1到100之内的整数,但数字中包含9的要跳过
2.每行输出5个满足条件的数,之间用空格分隔
3.如:1 2 3 4 5
public class Test12 {
public static void main(String[] args) {
int sum = 1;
for(int i=1;i<=100;i++) {
if(i%10 != 9 && !(i>=90 && i<100)) {
System.out.print(i + " ");
if(sum % 5 == 0) {
System.out.println(" ");
}
sum++;
}
}
}
}