JAVA流程控制-20210117
JAVA 流程控制
一、Scanner 对象
1.Scanner是什么
java.util是一个 工具包,我们可以通过 其中的Scanner 类来获取用户的输入。
2.使用Scanner进行数据读取
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//创建一个Scanner对象,使用new Scannner(),使用Alt+enter自动补全
// System.in 是代表读取键盘输入
//使用hasNext()【读一个单词,空格代表结束】,hasNextLine()【读一行,回车代表结束】 判断是否能读
if(scanner.hasNext()) //此处可以换成hasNextLine
{
String str;
str = scanner.next();
System.out.println(str);
}
scanner.close();
}
}
//---运行输入
//Hello World
//--运行输出
//Hello
Scanner默认使用空格作为分割符来分隔文本,但允许你指定新的分隔符
shift*2帮助查找类
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner scanner = new Scanner("Hello World!I love you, too");// 传给scanner字符串
scanner.useDelimiter("!|,");// 制定分隔符,"|"代表或,注意转义字符使用“//”
while (scanner.hasNext())// 使用循环,只要能继续读就为真
{
System.out.println(scanner.next());
}
scanner.close();
}
}
3.scanner读取小数和整数
和读取字符串类似,不过使用的方法不一样,例int:hasNextInt(),nextInt();float:hasNextFloat(),nextFloat()
用一个案例说明:
例3.1:输入多个数字,求总和和平均值
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double sum = 0.0; //总和
int n = 0; //平均值
while(scanner.hasNextDouble()) //判断条件,能读到double字符
{
sum +=scanner.nextDouble();
n+=1;
System.out.println("目前总和是:"+sum);
}
System.out.println(n+"个数的总和是:"+sum);
System.out.println(n+"个数的平均值是:"+sum/n);
scanner.close();
}
}
/*输入和输出
10
目前总和是:10.0
20
目前总和是:30.0
30
目前总和是:60.0
40
目前总和是:100.0
50
目前总和是:150.0
x
5个数的总和是:150.0
5个数的平均值是:30.0
*/
二、顺序、选择、循环(待添加)
1、顺序结构
java的基本结构
2、选择结构
if
//equals 判断字符串的一致
// 单选择和多选择
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
double grade = 83.5;
//if 单选
if(grade>60) System.out.println("及格");
//if 多选
if(grade>80) {
System.out.println("大于80");
//if嵌套
if(grade>90)
{
System.out.println("great");
}
}
else if(grade>80){
System.out.println("一般");
}
else{
System.out.println("不及格");
}
}
}
switch
switch(){
case val1:
break;
case val2:
break;
default: //(可选)
}
//-------------------------------
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
char grade = 'A';
switch(grade){
case 'A':
System.out.println("优秀");
break; //代表跳出switch,不执行下面的语句
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("及格");
default :
System.out.println("不及格");
}
}
}
/*-输出
优秀
*/
switch()内可以使用字符或字符串,是JDK的新特性
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
String grade = "ABC";
switch(grade){
case "ABC":
System.out.println("ABC");
break; //代表跳出switch,不执行下面的语句
case "中文":
System.out.println("中文");
break;
case "英语":
System.out.println("英语");
default :
System.out.println("其他");
}
}
}
字符本质还是字符串,如何查看class文件的编译情况,反编译文件(java--class 文件--反编译)
-
文件目录下JavaSE\out\production找到class文件
-
手动复制到src目录下
-
在IDEA中看到.class文件,点击查看
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // public class Demo4 { public Demo4() { } public static void main(String[] args) { String grade = "ABC"; byte var3 = -1; switch(grade.hashCode()) { case 64578: if (grade.equals("ABC")) { var3 = 0; } break; case 646394: if (grade.equals("中文")) { var3 = 1; } break; case 1074972: if (grade.equals("英语")) { var3 = 2; } } switch(var3) { case 0: System.out.println("ABC"); break; case 1: System.out.println("中文"); break; case 2: System.out.println("英语"); default: System.out.println("其他"); } } }
3、循环结构
while
while(为正)
{
执行循环体
}
do while:区别在于先执行一边循环体再判断
do{
执行循环体
}while(为真);
for
for循环结构更简单(iDEA快速生成方法 100.for)
for(初始化条件【可选】; 判断条件【可选】;迭代,或者说是更新【可选】)
{
循环体
}
例3.1:99乘法表的输出
import java.util.Scanner;
public class ninePlusNine {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {//对于第一行
for (int j = 1; j <= i; j++) {//列数=行号
System.out.print(j+"X"+i+"="+i*j+"\t");
}
System.out.println();//换行
}
}
}
增强型for
jdk5引入,遍历数组和集合的快捷方法
import java.util.Scanner;
public class enhanceFor {
public static void main(String[] args) {
int[] num = {10,20,30,40}; //int[] 数组类型
for (int x:num) //每一项遍历出来赋值给x
{
System.out.println(x);
}
}
}
三、break&continue(待添加)
break跳出当前层的循环
continue此次循环停止, 开始下一次循环
带标签的break和continue
public class enhanceFor {
public static void main(String[] args) {
label: //goto的痕迹
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
System.out.println(i+"-"+j);
if (j==2) break label; //跳出lablel后的循环
}
}
}
}
/* --输出
0-0
0-1
0-2
*/
四、例子和Debug
打印菱形
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
if(i>5){
for (int j=i-5; j>0;j--)
{
System.out.print(" ");
}
for(int j=1; j<=2*(10-i)-1;j++)
{
System.out.print("#");
}
}
if(i<=5)
{
for (int j=1;j<=5-i;j++)
{
System.out.print(" ");
}
for (int j=1;j<=2*i-1;j++)
{
System.out.print("#");
}
}
System.out.println();
}
}
}
/*--结果
#
###
#####
#######
#########
#######
#####
###
#
*/
debug:设置断点,debug,单步执行
浙公网安备 33010602011771号