day 04
目录
Scnner
Scanner是Java的一个类,它位于java.util包中。Scanner类提供了一种方便的方式来从标准输入中读取用户的输入。
使用Scanner类可以读取不同类型的输入数据,例如整数,浮点数,字符串等等。它提供了多个方法来读取不同类型的数据,如nextInt()用于读取整数,nextDouble()用于读取浮点数,nextLine()用于读取字符串等等。
以下是一个简单的示例,演示如何使用Scanner类从标准输入读取用户的输入:
import java.util.Scanner;
public class Main { public static void main(String[] args) { // 创建一个Scanner对象 Scanner scanner = new Scanner(System.in);
// 读取用户的输入
System.out.println("请输入一个整数:");
int num = scanner.nextInt();
System.out.println("您输入的整数是:" + num);
System.out.println("请输入一个字符串:");
String str = scanner.nextLine();
System.out.println("您输入的字符串是:" + str);
// 关闭Scanner对象
scanner.close();
}
}
在上面的示例中,首先我们创建了一个Scanner对象,然后使用nextInt()方法读取用户输入的整数,并使用nextLine()方法读取用户输入的字符串,最后关闭Scanner对象。
注意:在使用Scanner类之前,需要先导入java.util.Scanner包。另外,在读取完整数后,如果接下来要读取字符串,需要在读取完整数后调用nextLine()方法,以消耗掉换行符。否则,读取字符串时会直接读取到换行符。
三种程序结构
任何复杂的程序逻辑,都可以通过三种结构来实现:
- 顺序结构是程序中按照顺序执行的结构,即一条接一条地执行代码。
- 选择结构是根据条件执行不同的代码块。常见的选择结构有if语句和switch语句。
- 循环结构允许重复执行一段代码,直到满足特定条件后退出循环。常见的循环结构有for循环、while循环和do-while循环。
通过这三种结构的组合使用,可以实现复杂的程序逻辑。
分支结构
分支结构共分四类:
-
单分支结构(if):只有一个条件,根据条件的真假执行不同的操作。
-
双分支结构(if……else):有两个条件,根据条件的真假分别执行不同的操作。
-
多分支结构(if……else if):有多个条件,根据条件的真假分别执行不同的操作。
-
条件控制结构(switch……case):用于根据某个表达式的值来选择执行不同的代码块。它类似于if-else结构,但适用于多个条件的情况。
if结构(单分支)
语法
if(boolean){
语句块
}
执行过程
练习
//商场打折满两千打五折
double price = 2500;
if(price>=2000){
price*=0.8;
}
System.out.println("应付款:"+price)
if……else结构(双分支)
语法
if(boolean){
语句块1
}else{
语句块2
}
语句块1,语句块2,必执行其中之一,不会出现都执行,或者都不执行的情况
执行过程
练习
//商场打折,满2000打五折,不满2000打8折
double price =2500 //分别入大于两千和小于两千的数
if(price>=2000){
price*=0.8;
}else{
price*=0.8;
}
System.out.println("实际应付:"+price+"元");
if……else if结构(多分支)
语法
if(boolean-1){
语句块1
}else if(boolean2){
语句块2
}else if(boolean-n){
语句块n
}else{
语句块n+1
}
执行过程
练习
//商场打折 满2000打五折,满1000不满2000打7折,满500不满1000打8折,不满500打9折
double price = 25000 //分别带入满足各情况的数
if(price>=2000){
price*=0.5;
}else if(price>=1000){
price*=0.7;
}else if(price>=500){
price*=0.8;
}else{
price*=0.9;
}
System.out.println("实际应付;"+price+"元");
switch……case结构(条件控制)
语法
expression 可以是 int, short,byte,char ,String类型和枚举
value 为符合上述类型的值
switch (expression) {
case value1:
// 执行代码块1
break;
case value2:
// 执行代码块2
break;
case value3:
// 执行代码块3
break;
...
default:
// 执行默认代码块
}
执行过程
练习
import java.util.Scanner;
public class SwitchExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数字(1-7):");
int day = scanner.nextInt();
String dayOfWeek;
switch (day) {
case 1:
dayOfWeek = "星期一";
break;
case 2:
dayOfWeek = "星期二";
break;
case 3:
dayOfWeek = "星期三";
break;
case 4:
dayOfWeek = "星期四";
break;
case 5:
dayOfWeek = "星期五";
break;
case 6:
dayOfWeek = "星期六";
break;
case 7:
dayOfWeek = "星期日";
break;
default:
dayOfWeek = "输入有误";
break;
}
System.out.println(dayOfWeek);
}
}
特殊情况:
一个switch语句中,如果所有的case都没有break,那么程序会继续执行下一个case语句,直到遇到break或者switch语句结束为止。
int num = 1; //任意带数测试结果,或更改break 的位置和数量
switch (num) {
case 0:
System.out("zero");
case 1:
System.out("one");
case 2:
System.out("two");
break;
case 3:
System.out("three");
default:
System.out("默认输出");
}
循环
循环是一种重复执行某个代码块的结构。在程序中,循环通常用于执行重复的任务,直到满足某个条件为止。
循环的三个主要组成部分是:
循环变量:循环变量用于控制循环的次数,必须初始化。
循环条件:循环条件用于判断是否继续执行循环。
循环体: 循环体是要重复执行的代码块。
循环结构分类
while结构
语法:
循环变量初始化
while(循环条件){
【改变循环变量的值】
循环体
【改变循环变量的值】
}
int count = 0; // 初始化计数器
while (count < 5) { // 检查计数器是否小于5
System.out.println("这是第 " + (count + 1) + " 次循环"); // 执行循环体
count++; // 更新计数器
}
System.out.println("循环结束"); // 循环后的代码
}
执行过程:
练习
import java.util.Scanner;
public class GuessNumberGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 生成一个1到100之间的随机数作为答案
int answer = (int)(Math.random() * 100) + 1;
// 初始化猜测次数为0
int guesses = 0;
// 循环进行猜测
while (true) {
System.out.print("请输入一个1到100之间的数:");
int guess = scanner.nextInt();
// 猜测次数加1
guesses++;
// 判断猜测的数与答案的大小关系
if (guess > answer) {
System.out.println("猜大了");
} else if (guess < answer) {
System.out.println("猜小了");
} else {
System.out.println("恭喜你,猜对了!");
break;
}
}
// 输出猜测的次数
System.out.println("你猜了" + guesses + "次");
scanner.close();
}
}
do...while结构
do...while 结构适用于需要至少执行一次循环体内代码的情况。
语法:
循环变量初始化
do{
【改变循环变量的值】
循环体
【改变循环变量的值】
}while(循环条件)
int count = 0; // 初始化计数器
do {
System.out.println("这是第 " + (count + 1) + " 次循环"); // 执行循环体
count++; // 更新计数器
} while (count < 5); // 检查计数器是否小于5
System.out.println("循环结束"); // 循环后的代码
```
执行过程:
练习
import java.util.Scanner;
public class GuessingGame {
public static void main(String[] args) {
int secretNumber = (int) (Math.random() * 100); // 随机生成一个0-99之间的数
int guess;
int attempts = 0; // 记录猜测的次数
Scanner input = new Scanner(System.in);
System.out.println("欢迎来到猜字游戏!");
do {
System.out.print("请输入一个猜测的数字(0-99之间):");
guess = input.nextInt();
if (guess < secretNumber) {
System.out.println("猜小了,请再试一次。");
} else if (guess > secretNumber) {
System.out.println("猜大了,请再试一次。");
}
attempts++;
} while (guess != secretNumber);
System.out.println("恭喜你,猜对了!正确的数字是 " + secretNumber);
System.out.println("你总共猜测了 " + attempts + " 次。");
input.close();
}
}
for循环
Java的for循环用于重复执行一段代码固定次数的情况。它的语法如下:
for (初始化语句; 循环条件; 循环后操作) {
执行的代码;
}
其中,初始化语句用于初始化循环变量;循环条件是一个布尔表达式,如果为true则继续执行循环,如果为false则跳出循环;循环后操作用于更新循环变量。
下面是一个简单的例子,使用for循环打印出数字1到5:
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
输出结果为:
1
2
3
4
5
break ,continue
在Java循环中,break和continue是两个控制流语句,用于改变循环的执行流程。
- break语句:当循环遇到break语句时,会立即终止循环的执行,并且跳出循环体。通常用于在满足某个条件时提前结束循环。
例如,下面的代码使用for循环遍历一个数组,当找到目标值时使用break语句终止循环:
int[] arr = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
System.out.println("目标值找到,位置为:" + i);
break; // 终止循环
}
}
在以上代码中,当循环到arr[2]时,发现目标值为3,就会执行break语句,终止循环。
- continue语句:当循环遇到continue语句时,会立即结束当前迭代,继续下一次迭代。通常用于在满足某个条件时跳过当前迭代。
例如,下面的代码使用for循环打印1到10之间的所有奇数,当遇到偶数时使用continue语句跳过当前迭代:
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过当前迭代
}
System.out.println(i);
}
在以上代码中,当i等于2、4、6、8、10时,满足i % 2 == 0的条件,就会执行continue语句,跳过当前迭代,直接进入下一次迭代。
以上就是break和continue在Java循环中的应用。它们可以用于在特定条件下改变循环的执行流程,提高代码的灵活性和效率。
嵌套循环
在Java中使用嵌套循环的主要目的是处理具有复杂结构和多层次的问题。
经典问题用嵌套循环写一个九九乘法表
我们先来分析一下乘法表的构成如图:
这个乘法表是由一个多行多列的表格组成的,咱们可以先试着输出一行或者一列
for(int i = 1; i<=9;i++){
System.out.println("1*"+i+"="+1*i);
}
得到1*1到1*9的乘法表
for(int i = 1; i<=9;i++){
System.out.print(i+"*9"+"="+9*i+"\t");
}
print 为同行输出
"\t"为自动补齐(水平制表位符自动补齐8位)
int num = 6
for(int i =1 ;i<=num;i++){
System.out.print(i+"*"+num+"="+i*num+"\t")
}
咱们可以多带入几次num发现改变num 的值就可以输出1*num到num*num的行
如果我们把上面的两个程序结合一下运用用循环嵌套方式
外层循环控制行数,
内层循环控制每行的列数。
在内层循环中,通过 System.out.print
打印出每个乘法表达式的结果,
并使用制表符 \t
进行对齐。
每行打印完毕后,使用 System.out.println
进行换行。
附代码
public class MultiplicationTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + " * " + i + " = " + (i * j) + "\t");
}
System.out.println();
}
}
}
文章有问题欢迎指正。