戚心禾枱志
用户交互Scanner
Java提供了一个实现程序和人交互的工具类,用Scanner来获取用户的输入。java.util.Scanner是从Java5开始出现。
基本语法:
Scanner s = new Scanner(System.in)
通过Scanner类的next()和nextline()获取输入的字符串;使用hasNext()和hasNextline()判断是否还有输入的数据。
next():
- 一定要读取到有效字符后才结束输入
- 对有效字符之前的空白,自动去掉
- 将有效字符之后的空白当成分隔符或者结束符
- next()不能得到带空格符的字符串
nextline():
- 以Enter为结束符,返回得是输入回车之前的所有字符
- 可以获得空白
package Scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args){
//创建一个扫描器对象,用于接受键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if(scanner.hasNext()){
//使用next方式接收
String str = scanner.next();
System.out.println("输入的内容为:"+str);
}
//凡是属于IO流的类如果不关闭就会一直占用
scanner.close();
}
}
结果:
使用next方式接收:
Hello world
输入的内容为:Hello
package Scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextline方式接收:");
if(scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println("输出的内容为:"+str);
}
scanner.close();
}
}
结果:
使用nextline方式接收:
pig pig
输出的内容为:pig pig
package Scanner;
import java.util.Scanner;
public class ScannerReview {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入整数:");
if(scanner.hasNextInt()){
int i = scanner.nextInt();
System.out.println("整数数据为:"+i);
}else{
System.out.println("你输入的不是整数数据");
}
if(scanner.hasNextFloat()){
float f = scanner.nextFloat();
System.out.println("你输入的是小数数据:"+f);
}else{
System.out.println("你输入的不是小数数据");
}
scanner.close();
}
}
结果:
请输入整数:
f
你输入的不是整数数据
你输入的不是小数数据
package Scanner;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args){
//输入多个数字,求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出运行结果
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//计算输入了多少个数字
int m = 0;
//通过循环判断是否还有输入,并在里面对每一次进行求和统计
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m++;
sum = sum+x;
System.out.println("你输入了第"+m+"个数据,当前结果sum = "+sum);
}
System.out.println(m+"个数字的和为:"+sum);
System.out.println(m+"个数字的平均值是:"+sum/m);
scanner.close();
}
}
结果:
8
你输入了第1个数据,当前结果sum = 8.0
6
你输入了第2个数据,当前结果sum = 14.0
10
你输入了第3个数据,当前结果sum = 24.0
v
3个数字的和为:24.0
3个数字的平均值是:8.0
顺序结构
if选择结构
if单选择结构
package struct;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args){
java.util.Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s = scanner.nextLine();
//equals:判断字符串是否相等
if(s.equals("Hello")){
System.out.println(s);
} else {
System.out.println("End");
}
scanner.close();
}
}
结果:
请输入内容:
Hello
Hello
if双选择结构
package Scanner;
import java.util.Scanner;
public class ScannerReview {
public static void main(String[] args){
Scanner yuboyao = new Scanner(System.in);
System.out.println("请输入你的数学分数:");
int fenshu = yuboyao.nextInt();
if(fenshu>=60){
System.out.println("你的师生情产生作用了呢~");
}else{
System.out.println("恭喜你明年还可以上应用统计");
}
yuboyao.close();
}
}
结果:
请输入你的数学分数:
60
你的师生情产生作用了呢~
if多选择结构:
package Scanner;
import java.util.Scanner;
public class ScannerReview {
public static void main(String[] args){
Scanner sm = new Scanner(System.in);
System.out.println("请输入你的应用统计分数:");
int score = sm.nextInt();
if(score<60 && score>=0){
System.out.println("你没有及格哦 ┭┮﹏┭┮");
}
else if(score<70 && score>=60){
System.out.println("你的等级是D哦~");
}
else if(score<80 && score>=70){
System.out.println("你的等级是C哦~");
}
else if(score<90 && score>=80){
System.out.println("你的等级是B哦~");
}
else if(score<100 && score>=90){
System.out.println("你的等级是A哦~");
}
else if(score == 100){
System.out.println("真棒,满分哦~");
}
else{
System.out.println("你的成绩不合法哦");
}
sm.close();
}
}
结果:
请输入你的应用统计分数:
1000
你的成绩不合法哦
if嵌套结构
switch多选择结构
判断一个变量和与一些列值中的某个值是否相等
switch语句中的变量类型可以是:
- byte,short,int或者char
- 从Java SE 7开始,支持String类型了
- case标签必须是字符串常量或字面量
package struct;
public class SwitchDemo01 {
public static void main(String[] args){
//不加break会出现case穿透 //switch匹配一个具体的值
char grade = 'B';
switch (grade){
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("及格");
break;
case 'D':
System.out.println("再接再厉");
break;
case 'E':
System.out.println("挂科");
break;
default:
System.out.println("未知等级");
}
}
}
结果:
良好
package struct;
public class SwitchDemo02 {
public static void main(String[] args){
String name = "xiaolong";
//JDK7的新特性,表达式可以是字符串
//字符的本质还是数字
//反编译 java--class(字节码文件)--反编译(IDEA)
switch (name){
case"yby":
System.out.println("yby");
break;
case"luobote":
System.out.println("luobote");
break;
case"xiaolong":
System.out.println("xiaoxiaolong");
break;
default:
System.out.println("异常");
}
}
}
结果:
xiaoxiaolong
反编译:
把class文件丢到IDEA里就可以看到源码 P37 11:20
①Project Struc
②复制输出路径,并且打开文件所在位置,找到所需.class文件
③Open in Explore,把.class文件拖入即可
循环结构
while循环
package struct;
public class WhileDemo01 {
public static void main(String[] args){
//输出1~100
int i = 0;
while(i<100){
i++;
System.out.println(i);
}
}
}
少部分情况需要循环一直进行,比如服务器的请求响应等
package struct;
public class WhileDemo03 {
public static void main(String[] args){
//计算1~100的和
int i = 0;
int sum = 0;
while(i<100){
i++;
sum+=i;
}
System.out.println("1~100的和为:"+sum);
}
}
结果:
1~100的和为:5050
do…while循环
package struct;
public class DoWhileDemo01 {
public static void main(String[] args){
int i = 0;
int sum = 0;
do{
sum+=i;
i++; //sunm和i的计算要分先后顺序
} while(i<=100);
System.out.println("1~100的和为"+sum);
}
}
结果:
1~100的和为5050
package struct;
public class DoWhileDemo02 {
public static void main(String[] args){
int a = 0;
while(a<0){
System.out.println(a);
a++;
}
System.out.println("===============");
do{
System.out.println(a);
a++;
}while(a<0);
}
}
结果:
===============
0
for循环
最有效最灵活
package struct;
public class ForDemo01 {
public static void main(String[] args){
int a = 1; //初始化条件
while(a<=100){
//条件判断
System.out.println(a);//循环体
a+=2;//迭代
}
System.out.println("循环结束");
for(int i =1;i<=100;i++){ //100.for+Enter
//初始化条件;条件判断;迭代
System.out.println(i);
}
System.out.println("for循环结束");
/**
可以是空语句
*/
}
}
package struct;
public class ForDemo02 {
public static void main(String[] args){
//练习1:计算0~100之间的奇数和偶数的和
int oddSum = 0;
int evenSum = 0;
for (int i = 0; i < =100; i++) {
if(i%2!=0){
oddSum+=i;
}else{
evenSum+=i;
}
}
System.out.println("奇数和为:"+oddSum);
System.out.println("偶数和为:"+evenSum);
}
}
结果:
奇数和为:2500
偶数和为:2550
package struct;
public class ForDemo03 {
public static void main(String[] args){
//练习2:用while或for循环输出1~1000之内能被5整除的数,并且每行输出3个
for (int i = 0; i < 1000; i++) {
if(i%5==0){
System.out.print(i+"\t");
}
if(i%(5*3)==0){
//换行
System.out.println(); // System.out.print('\n);
}
}
//println:输出完 会换行
//print:不换行
}
}
结果:
0
5 10 15
20 25 30
35 40 45
50 55 60
65 70 75
80 85 90
95 100 105
110 115 120
125 130 135
140 145 150
155 160 165
170 175 180
185 190 195
200 205 210
215 220 225
230 235 240
245 250 255
260 265 270
275 280 285
290 295 300
305 310 315
320 325 330
335 340 345
350 355 360
365 370 375
380 385 390
395 400 405
410 415 420
425 430 435
440 445 450
455 460 465
470 475 480
485 490 495
500 505 510
515 520 525
530 535 540
545 550 555
560 565 570
575 580 585
590 595 600
605 610 615
620 625 630
635 640 645
650 655 660
665 670 675
680 685 690
695 700 705
710 715 720
725 730 735
740 745 750
755 760 765
770 775 780
785 790 795
800 805 810
815 820 825
830 835 840
845 850 855
860 865 870
875 880 885
890 895 900
905 910 915
920 925 930
935 940 945
950 955 960
965 970 975
980 985 990
995
package struct;
public class ForDemo04 {
public static void main(String[] args){
//练习3:输出99乘法表
for (int j = 1; j <= 9; j++) { //横
for (int i = 1; i <= j; i++) {
System.out.print(j+"*"+i+"="+(j*i)+"\t"); //竖
}
System.out.println();
}
}
}
结果:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
增强for循环
主要用于数组或者集合
package struct;
public class ForDemo05 {
public static void main(String[] args){
int[] numbers = {10,20,30,40,50}; //定义了一个数组
for (int i = 0; i < 5; i++) {
System.out.print(numbers[i]+"\t");
}
System.out.println();
System.out.println("++++++++++++++++++++++++++++");
//遍历数组的元素
for(int x:numbers){ //数组numbers将每一项赋值给整数型x,并输出
System.out.print(x+"\t");
}
}
}
结果:
10 20 30 40 50
++++++++++++++++++++++++++++
10 20 30 40 50
break continue
package struct;
public class BreakDemo {
public static void main(String[] args){
int i = 0;
while(i<100){
i++;
System.out.print(i+"\t");
if(i==30){
break; //跳出循环
}
}
System.out.println();
System.out.println("123");
}
}
结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
123
package struct;
public class ContinueDemo {
public static void main(String[] args){
int i = 0;
while(i<100){
i++;
if(i%10==0){ //输出换行之后跳回i++
System.out.println();
continue;
}
System.out.print(i+"\t");
}
}
}
结果:
1 2 3 4 5 6 7 8 9
11 12 13 14 15 16 17 18 19
21 22 23 24 25 26 27 28 29
31 32 33 34 35 36 37 38 39
41 42 43 44 45 46 47 48 49
51 52 53 54 55 56 57 58 59
61 62 63 64 65 66 67 68 69
71 72 73 74 75 76 77 78 79
81 82 83 84 85 86 87 88 89
91 92 93 94 95 96 97 98 99
带标签的continue(理解)
麻烦,不建议使用
package struct;
public class LabelDemo {
//打印101-150之间的质数
int count = 0;
outer:for(int i = 101;i<150;i++){
for(int j =2;j<i/2;j++){
if (i%j == 0){
continue outer;
}
}
System.out.println(i+"\t");
}
}
package struct;public class TestDemo {
public static void main(String[] args){
//打印三角形 5行
for (int i = 1; i <= 5; i++) {
for (int j = 5; j>=i; j--) {
System.out.print(" "); //打出最左侧的空格三角形
}
for (int j = 1; j <= i; j++) { //打出*三角形的左半部分
System.out.print("*");
}
for (int j = 1; j < i; j++) { //如果j<=i,那么第一行满足1<=1,三角形顶部就有两个点,错误
System.out.print("*"); //打出*三角形的右半部分
}
System.out.println();
}
System.out.println("nice,bro");
}
}
结果:
*
***
*****
*******
*********
nice,bro
Debug
程序运行到该行 会停止,并且输出当前i的值
程序会显示每一步的自变量的值