一、接收用户输入
在开发过程中,有时候我们需要用户自己输入参数,不能再是我们自己定义。那这就引入了Java里面的工具包——java.util.Scanner包。这个包里面有一个封装好的 Scanner 方法。那么底层原理先暂时不去深究,我们如何用这个方法来接收用户的输入参数呢?
- 示例代码:
import java.util.Scanner;
/*
案例:键盘录入数据
需求:
1、提示用户录入他/她的年龄
2、通过键盘录入功能,接受用户录入的年龄
3、将用户录入的年龄打印到控制台上
步骤:
1、导包
2、创建对象
3、调用方法
*/
public class ScannerDemo01 {
public static void main(String[] args) {
//1、提示用户录入他/她的年龄
System.out.println("请录入您的年龄:");
//2、通过键盘录入功能,接受用户录入的年龄
//2.1、创建键盘录入对象
Scanner sc = new Scanner(System.in);
//2.2、接受用户录入的年龄
int age = sc.nextInt();
//3、将用户录入的年龄打印到控制台上
System.out.println("您的年龄是:" + age);
}
}
上面的代码中,我们首先引入了Scanner这个包,然后创建了一个新的对象"sc",通过sc.nextINT()接受用户输入的数值型参数。Scanner可以接收用户输入的多种类型参数,比如(但不限于)以下几种:
- 值得注意的是,nextLine()与其他的类型的一起使用,可能会出现错误。比如:next()在nextLine()之前使用时,由于Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,它判断读取结束的标示是 空白符;比如空格,回车,tab 等等。
- 当我们想要输入空格作为分隔符时,next()方法读取到空白符就结束;
- 那后面nextLine()读取到回车也就结束了,这样就会导致输入的参数不正确。
二、执行结构概述
执行结构分为三个大类:
- 顺序结构
顺序结构是一种基本的控制结构,他按照语句出现的顺序执行操作 - 分支结构
分支结构又被成为选择结构,根据条件成立与否来执行操作 - 循环结构
循环结构是一种重复结构如果条件成立,它会重复执行某一循环体,知道初心不满足的条件为止
三、分支结构
1. if条件语句
if 条件结构是根据条件判断之后再做处理,有四种类型:
- if(条件语句){…}
- if (条件语句){…}else{…}
- if (条件语句){…}else if(条件语句){…}
- if (条件语句){…}else if(条件语句){…}else{…}
- if(){}语句示例代码:
public static void main(String[] args) {
int a = 10;
if(a < 50){
System.out.println("a比50小");
}
}
- if(){}else{}语句示例代码:
public static void main(String[] args) {
int a = 10;
if(a < 50){
System.out.println("a比50小");
}else {
System.out.println("a比50大");
}
}
- if(){}else if(){}语句示例代码:
public static void main(String[] args) {
int a = 10;
if(a < 50){
System.out.println("a比50小");
}else if (a>50){
System.out.println("a比50大");
}
}
- if(){}else if(){}else{}语句示例代码:
public static void main(String[] args) {
int a = 10;
if(a < 50){
System.out.println("a比50小");
}else if (a>50){
System.out.println("a比50大");
}else {
System.out.println("a等于50");
}
}
2. switch语句
switch(表达式){
case 取值 1: 语句块 1;
break;
case 取值 n: 语句块 n;
break;
default: 语句块 n+1;
break;
}
switch 语句有关规则
- 表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
- case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
- default 子句是可选的;
- break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;
- 如果 case 后面没有写 break 则直接往下面执行!
- Case 后面的执行体可写{ }也可以不写{ }
示例代码:
public static void main(String[] args) {
//1、创建sc对象
Scanner sc = new Scanner(System.in);
//2、提示用户键盘录入月份并接收
System.out.println("请输入一个月份:");
int mouth = sc.nextInt();
//方式1:switch实现
switch (mouth) {
case 12:
case 1:
case 2:
System.out.println(mouth + "月是冬季");
break;
case 3:
case 4:
case 5:
System.out.println(mouth + "月是春季");
break;
case 6:
case 7:
case 8:
System.out.println(mouth + "月是夏季");
break;
case 9:
case 10:
case 11:
System.out.println(mouth + "月是秋季");
break;
default:
System.out.println("您输入的月份信息有错,已自动退出!");
break;
}
}
四、循环结构
- 循环语句功能:
在循环条件满足的情况下,反复执行特定代码 - 循环语句分类
for 循环
while 循环
do/while 循环
1. while循环
符合条件,循环继续执行;否则,循环退出
特点:先判断,再执行
语法规则:
while(条件表达式){
//要执行的语句块;
}
案例:
已知珠穆朗玛峰的高度约为8844.43米,约为8844430毫米
问:
现有一张足够大的纸,厚度为0.1毫米,需要折叠多少次,才能达到珠穆朗玛峰的高度?
- 代码实现
public static void main(String[] args) {
double paper = 0.1;
int sum = 0;
while (paper < 8844430){
paper *= 2;
sum++;
}
System.out.println("总共需要折叠" + sum + "次");
}
2. do while循环
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出
特点:先执行,再判断
语法规则:
do {
//循环操作
}while(条件表达式);
while 循环和 do-while 循环的区别?
- while:先判断条件,如果条件满足,再执行循环操作
- do while:先执行一遍循环操作,然后再判读条件,如果条件满足,继续执行循环操作。
3. for循环
语法规则:
for(初始化参数;判断条件 ;更新循环变量){
//循环体;
}
案例:输出所有的水仙花数
提示:
水仙花数是一个三位数
它的各个位置的立方和等于本身,例如:153 = 111 + 555 + 333
- 代码实现
public static void main(String[] args) {
for (int num = 100; num <= 999; num++){
int g, s, b;
g = num % 10;
s = num / 10 % 10;
b = num /100;
int m = 3;
int result = (int)(Math.pow(g,m)+Math.pow(s,m)+Math.pow(b,m));
if (result == num){
System.out.println(num + "是水仙花数");
}
}
}
4. for循环嵌套
案例:利用for循环嵌套打印三角形、菱形
public static void main(String[] args) {
for (int m = 0; m <= 3; m++){
for (int n = 1; n <= 2*m +1; n++){
System.out.print("*");
}
System.out.println();
}
System.out.println("以上打印的是1、3、5、7个星星数");
System.out.println("-------------------------");
System.out.println("以下打印的是正三角形");
for (int i = 1; i < 5; i++){
//1、控制空格数
for (int a = 1; a < 5-i; a++){
System.out.print(" ");
}
//2、控制星星的数量
for (int b = 1; b <= 2*i-1; b++){
System.out.print("*");
}
System.out.println();
}
System.out.println("-------------------------");
System.out.println("以下打印的是实心菱形");
for (int p = 1; p < 5; p++){
//1、控制空格数
for (int a = 1; a < 5-p; a++){
System.out.print(" ");
}
//2、控制星星的数量
for (int b = 1; b <= 2*p-1; b++){
System.out.print("*");
}
System.out.println();
}
for (int q = 1; q < 4; q++){
//1、控制空格数
for (int m = 1; m <= q; m++){
System.out.print(" ");
}
//2、控制星星的数量
for (int n = 5; n >= 2*q-1; n--){
System.out.print("*");
}
System.out.println();
}
System.out.println("-------------------------");
System.out.println("以下打印的是空心菱形");
for (int p = 1; p < 5; p++){
//1、控制空格数
for (int a = 1; a < 5-p; a++){
System.out.print(" ");
}
//2、控制星星的数量
for (int b = 1; b <= 2*p-1; b++){
//控制星星中的空格
if (b == 1 || b == 2*p-1){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
for (int q = 1; q < 4; q++){
//1、控制空格数
for (int m = 1; m <= q; m++){
System.out.print(" ");
}
//2、控制星星的数量
for (int n = 5; n >= 2*q-1; n--){
//控制星星中的空格
if (n == 5 || n == 2*q-1){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
5. break和continue
语法规则:
break:跳出循环、结束循环
continue:跳出本次循环,进入下一次循环
- break案例:打印10次Hello World,在第5次时,结束循环
public static void main(String[] args) {
//打印10次Hello World,在第5次时,结束循环
for (int i = 1; i < 10; i++) {
if (i ==5)
break;
System.out.println("Hello World! " + i);
}
}
- continue案例:打印1–10之间的Hello World,且只打印3的倍数次
public static void main(String[] args) {
//打印1--10之间的Hello World,且只打印3的倍数次
for (int i = 1; i <= 10; i++) {
if (i % 3 != 0)
continue;
System.out.println("Hello World! " + i);
}
}
6. 如何跳出多重循环
步骤:
a.首先给循环起别名:eg:
demo:for(i = 1; i <= 10; i++){
for ( ...; ...; ... ){
}
}
b.用if判断条件,满足条件跳出循环"demo",eg:
demo:for(i = 1; i <= 10; i++){
for (j = 1; j< = i; j++){
System.out.println("我是大哥!")
if(i == 5){
break demo;
}
}
}
补充:如何判断用户输入的类型
判断用户输入的类型是否为我们想要的类型,只需要在用户输入时判断,如果是所需类型,则进入对应条件,否则,返回给用户错误信息(该方法不会导致程序出错)
例如,判断用户是否输入类型为int型可以这样写:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一串数字用于检验:");
if (input.hasNextInt()){
System.out.println("是数字");
}else {
System.out.println("不是数字");
}
}
除此之外,其他很多类型也都能进行判断~