d05 Java流程控制(p33-p44)
1.用户交互Scanner
-
之前的基本语法中没有涉及到程序和人的交互,java.util.Scanner是Java5提供的工具类,可以通过Scanner类获取用户的输入。
-
基本语法:创建Scanner对象
Scanner s = new Scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取之前一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
new Scanner 再写入参数(System.in) 最后自动封装成scanner对象,用于接收用户的输入
if(){ } 括号中的语句默认执行的是true,然后执行{ }中的操作
Ⅰ. 代码流程
-
新建一个package,再创建一个新的类文件。
-
psvm——public static void main(String[] args){},写好main方法,因为外面的类文件代码已经自动生成好了,public class 类名{}
-
新建一个Scanner类,用于接收用户的输入 new Scanner(System.in); alt+enter 自动补全代码,将创建的对象返回给scanner
-
sout——System.out.println("使用next方式或者nextLine方式去接受输入的数据 ");
-
进行if(scanner.hasNextLine())判断是否有下一行,使用scanner的属性方法hasNextLine()分析用户是否有输入
-
使用scanner.nextLine()去接收用户的输入,并返回给String str = scanner.nextLine();
-
最后加上scanner.close(),使用close()方法,将IO流的scanner类关闭,避免无效占用资源。
package com.lin.scanner; import java.util.Scanner; /** * 作者:章王勇 * 时间:2022/11/19 */ public class ScannerDemo02 { public static void main(String[] args) { //准备从键盘接收数据 Scanner scanner = new Scanner(System.in); //java给出的提示,让用户尽快输入相关数据 System.out.println("使用nextLine方式接收:"); //判断是否还有输入 if(scanner.hasNextLine()){ //等待用户去输入,只要不去输入,这个程序永远都在执行,等待用户的输入,以回车结束 String str = scanner.nextLine(); //接收用户的输入 System.out.println("输出的内容为:"+ str); } //关闭scanner类,减少资源的无效占用 scanner.close(); } }
Ⅱ. Scanner对象中next()与nextLine()比较
-
next()
- 一定要读取到有效字符后才能结束输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
- 只有输入有效字符后才能将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
-
nextLine() 常用
- 以enter为结束符,即得到的是输入回车符之前的所有字符
- 可以获得空白
2.Scanner进阶使用
package com.lin.scanner;
import java.util.Scanner;
/**
* 作者:章王勇
* 时间:2022/11/20
*/
public class Demo03 {//if判断
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//从键盘接收数据
int i = 0;
float f = 0.0F;
System.out.println("请输入整数:");
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("整数数据:"+ i);
}else{
System.out.println("输入的不是整数数据!");
}
System.out.println("请输入小数:");
if(scanner.hasNextFloat()){
f = scanner.nextFloat();
System.out.println("小数数据:"+ f);
}else{
System.out.println("输入的不是小数数据!");
}
scanner.close();
}
}
public class Demo04 {//while循环
public static void main(String[] args) {
//输入多个数字,求和以及平均数,没输入一个数字使用回车进行确认,通过非数字结束输入并执行结果
//创建一个scanner对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
//求和
double sum = 0;
//计算输入了几个数字
int m = 0;
//通过循环判断是否还有输入,并在里面对每一次的结果进行求和与统计
while(scanner.hasNextDouble()){
double x = scanner.nextDouble();
m += 1;
sum += x;
System.out.println("当前共输入了"+m+"个数据,"+"总和为"+sum);
}
System.out.println(m + "个数的和为" + sum);
System.out.println(m + "个数的平均值是" + (sum / m));
scanner.close();
}
}
3.顺序结构
Java的基本数据结构就是顺序结构,除非特别说明,否则就按照顺序一句一句执行。顺序结构是最简单的算法结构。语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
4.if选择结构
1) if单选择结构
if(布尔表达式){
//如果布尔表达式值为true则执行的语句
}
2) if双选择结构
if(布尔表达式){
//如果布尔表达式值为true则执行的语句
}else{
//如果布尔表达式值为false则执行的语句
}
3) if多选择结构
if(布尔表达式1){
//如果布尔表达式1值为true则执行的语句
}else if(布尔表达式2){
//如果布尔表达式2值为true则执行的语句
}else if(布尔表达式3){
//如果布尔表达式3值为true则执行的语句
}else{
//如果以上布尔表达式值为false则执行的语句
}
4) if嵌套结构
if(布尔表达式1){
//如果布尔表达式1值为true则执行的语句
if(布尔表达式2){
//如果布尔表达式2值为true则执行的语句
}
}
5.Switch选择结构
switch case 语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支。
switch语句中的变量类型可以是byte、short、int、char、String
case标签必须是字符串常量或者字面量
switch(expression){
case value:
//语句
break;//可选
case value:
//语句
break;
//可以由任意数量的case语句
default://可选
//语句
}
如果不加break,匹配到某些case值之后,会出现case穿透现象,即将匹配到的case语句后面的其他语句也一并执行,直到遇到break跳出。if用于判断区间,switch则是匹配具体的值。、
八大基本数据类型:byte、short、char、int、long、float、double、boolean + 字符串数据类型 String
shift + tab : 取消缩进
在项目结构(ctrl+shift+alt+s)中可以找到,class文件编译后输出的路径
反编译:将IDEA输出路径中的class文件复制到IDEA中可以看到编译后的源码是什么样子。
6.While循环详解
顺序结构的程序只能被执行一次就停止了,不符合人的实际需求,因而设计了循环结构,让代码运行指定的次数,甚至一直运行。//检查开始和结束是否正确即可判断出循环是否正确
while(布尔表达式){
//循环内容
}
public class StructWhile01 {
public static void main(String[] args) {
int i=0;
int sum=0;
while(i<=100){
sum+=i;
i++;
}
System.out.println(sum);//5050
}
}
- 大多数情况是需要让循环停止下来的,关键是设计一个让表达式失效的方式来结束循环。
- 少部分情况需要循环一直执行,比如服务器的请求响应监听。
- 循环条件一直为true会造成死循环,正常的业务编程中应尽量避免死循环,会影响性能或造成程序卡死崩溃!
7.DoWhile循环
do{
//代码语句
}while(布尔表达式);
public class StructDoWhile01 {
public static void main(String[] args) {
int i = 0;
int sum = 0;
do{
sum+=i;
i++;
}while(i<101);
System.out.println(sum);//5050
}
}
对于while循环而言,如果不满足条件,则不进入循环,但有时候即使不满足条件也至少要执行一次,此时就需要使用do...while循环
- while和do-while的区别:
- while是先判断后执行,do-while是先执行后判断
- do-while总是保证循环体至少被执行一次
8.For循环详解
虽然所有循环都可以使用while循环和do-while循环表示,但是for循环可以使一些循环结构变得更加简单。for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环的执行次数在执行前是可以确定的,语法格式为:
for(初始化;布尔表达式;更新){
//代码语句
}
/*
多行注释
**/
/**
文档注释
*/
// 100.for + enter 就是for循环的快捷方式
- for循环的几点说明:
- 最先执行的是初始化步骤,可以声明一种类型,但可以初始化一个或多个循环控制变量,也可以是空语句。
- 然后检查布尔表达式的值,true则执行循环体;否则循环终止,执行循环体后面的语句。
- 执行一次循环体后,再更新循环控制变量。
- 再次检测布尔表达式的值,循环上述过程。
练习1:计算0-100之间的奇数和与偶数和
public class ForLoop {
public static void main(String[] args) {
//练习1:计算0-100之间的奇数和与偶数和
int sum_even=0;//偶数和
int sum_odd=0;//奇数和
for (int i = 0; i < 101; i++) {//执行一次循环体后,再更新循环控制变量
if (i % 2 == 0) {
sum_even += i;
} else {
sum_odd += i;
}
}
System.out.println("偶数和:"+sum_even);
System.out.println("奇数和:"+sum_odd);
}
}
练习2:用while或for循环输出1-1000之间可以被5整除的数字,并且每行输出3个
public class ForLoop02 {
public static void main(String[] args) {
//练习2:用while或for循环输出1-1000之间可以被5整除的数字,并且每行输出3个
for (int i = 1; i < 1001; i++) {
if(i%5==0){
System.out.print(i+"\t");//这里要用双引号,不能是单引号
}
//println 输出完会换行
//print 输出后不会换行,会在这一行里一直输出
if(i%(5*10)==0){//换行
System.out.println();
//System.out.print("\n");
}
}
}
}
9.打印九九乘法表
public class ForLoop0399 {
public static void main(String[] args) {
for (int j = 1; j <= 9; j++) {//元素j表示行数,从1增加到9
for (int i = 1; i <= j; i++) {//元素i表示行数,从1增加到j
System.out.print(i + "*" + j + "=" + (i*j) + "\t");
}
System.out.println(); //换行的作用
}
}
}
/*
1.先打印第一行,每一行的输出使用的是print 不是println
2.固定行号,再用循环去遍历列号
3.去除重复项,i<=j
4.调整样式 使用\t 起到tab的作用,使用println()换行改变样式
**/
10.增强for循环
增强for循环主要是用于数组或者集合中,语法格式为:
for(声明语句:表达式){
//代码句子
}
public class ForLoop03 {
public static void main(String[] args) {
int [] numbers = {1,2,3}; //定义一个数组
for (int i = 0; i < 3; i++) {
System.out.println(numbers[i]);
}
System.out.println("==========");
//遍历数组的元素,并赋值给x,是一种偷懒的for循环语句表达
for(int x:numbers){
System.out.println(x);
}
}
}
- 声明语句:声明新的局部变量,该变量的类型必须与数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
11.break、continue、goto
break在任何循环语句的主体部分,均可使用break控制循环的流程,break用于强制退出循环,不执行循环中剩余的语句;完全跳出循环,不回头了,接着执行循环后面的语句。 (离职)
continue用在循环语句中,用于终止某次循环过程,即跳过当前这次循环体尚未执行的语句,接着进行下一次是否执行循环的判定。碰到continue就跳回到循环一开始的地方。 (调休)
12.打印三角形及Debug
public class StructTriangle {
public static void main(String[] args) {
//打印三角形 5行
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= 1+i; j--) {
System.out.print(" ");
}
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
for (int j = 1; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
先打空格,再打星,一点点拼接而成的。
标签:语句,java,scanner,System,day05,循环,狂神,public,out From: https://www.cnblogs.com/olin25/p/16914359.html