用户交互Scanner以及三种结构详解!!!
Scanner对象
-
Java给我们提供了一个工具类,来获取用户的输入。
-
java.util.Scanner是java5的新特性
-
基本语法
Scanner s = new Scanner (System.in) ;
通过Scanner类的 next() 与 nextLine() 方法获取输入的字符串
在读取前我们一般需要 使用 hasNext() 与 Nextline() 判断是否还有输入的数据。
next():
-
一定要读取到有效字符后才可以结束输入。
-
对输入的有效字符之前遇到空白,next()方法会自动将其去掉。
-
只有输入有效字符后才能将其后面输入的空白作为分隔符或者结束符。
-
next()不能得到带有空格的字符串。
nextLine
-
以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
-
可以得到空白。
stample01
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()){
String str = scanner.next();
System.out.println("输出的内容为:"+str);
}
//凡是属于IO流的类如果不关闭会一直占用资源,要养成良好习惯用完就关掉
scanner.close();
}
}
stample02
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();
}
}
stample03
package Scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner (System.in);
System.out.println("请输入数据:");
String str = scanner.nextLine();
System.out.println("输出的内容为:"+str);
scanner.close();
}
}
stample04
package Scanner;
import java.util.Scanner;
public class Demo04 {
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();
}
}
stample05
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;
//通过循环判断是否还有输入,并在里面对每一次进行求和和统计
System.out.println("请输入数据:");
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m = m + 1;
sum = sum + x;
System.out.println("你输入了第"+m+"个数据");
}
System.out.println(m+"个数的和为:"+sum);
System.out.println(m+"个数的平均数为:"+(sum/m));
scanner.close();
}
}
顺序结构
-
Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
-
语句与语句之间,框与框之间都是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任意一个算法都离不开的一种基本算法结构
选择结构
if单选择结构
语法:
if(布尔表达式)
{
//如果布尔表达式为true将执行的语句
}
stample
package ShunXu;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
// equals : 判断字符串是否相等
if (s.equals("Hello"))
{
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}
if双选择结构
语法:
if(布尔表达式)
{
//如果布尔表达式的值为true
}
else
{
//如果布尔表达式的值为false
}
stample
package ShunXu;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if(score>=60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
scanner.close();
}
}
if多选择结构
语法:
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
stample
package ShunXu;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if(score==100){
System.out.println("恭喜满分!");
}else if(score>=90 && score<100){
System.out.println("A");
}else if(score>=80 && score<90){
System.out.println("B");
}else if(score>=70 && score<80){
System.out.println("C");
}else if(score>=60 && score<70){
System.out.println("D");
}else if(score>=0 && score<60) {
System.out.println("不及格");
}else{
System.out.println("成绩不合法!");
}
scanner.close();
}
}
注意事项:
-
语句至多有1个else语句,语句在所有else if 语句之后。
-
if语句可以有若干个 else if 语句,他们必须在 else 语句之前。
-
其中一个else if语句检测为true ,其他的else if 以及 else 语句都跳过执行。
嵌套的if结构
语法:
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}
switch选择结构
语法:
switch(expression){
case value :
//语句
break ; //可选
case value :
//语句
break; //可选
//可以有任意数量的case语句
default : //可选
//语句
}
-
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
-
switch 语句中的变量类型可以是byte,short,int或者char。
stample
package ShunXu;
import java.util.Scanner;
public class SwitchDemo01 {
public static void main(String[] args) {
char score = 'F';
switch (score){
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("~未知等级~");
}
}
}
用break 称为 break穿透
switch匹配一个具体的值
特别说明 :从Java SE7开始 ,switch支持字符串 String 类型了!
示例:
package ShunXu;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "猫凹";
switch(name){
case "猫凹" :
System.out.println("猫凹");
break;
case "狂神" :
System.out.println("狂神");
break;
default :
System.out.println("弄啥嘞!");
}
}
}
特别注意:
-
字符串的本质还是数字。
-
反编译 java--class(字节码文件)--反编译(IDEA)

循环结构
while循环
语法:
while(布尔表达式){
//循环内容
}
注意:
-
只要布尔表达式为true,循环就会一直执行下去。
-
大多数情况是会让循环停下来的,我们需要一个表达式失效的方式来结束循环。
-
少部分情况会让循环一直执行,比如服务器的请求相应监听等。
-
循环条件一直为true就会造成无限循环,会影响程序性能甚至造成程序卡死奔溃!
-
思考,计算1+2+3+···+100=?
package ShunXu;
public class WhileDemo01 {
public static void main(String[] args) {
int i = 0 ;
int sum = 0 ;
while (i<=100){
sum = sum + i ;
i = i + 1 ;
}
System.out.println("得到的总和为:"+sum);
}
}
得到结果为
5050
do while循环
对于while循环,如果不满足条件,则不能进入循环。但有时我们需要即使不满足条件,也要至少执行一次。这时,我们就用到了do while。
语法:
do{
//代码语句
}while(布尔表达式);
while 与 do while 循环的比较
package ShunXu;
public class DoWhileDemo01 {
public static void main(String[] args) {
int i = 0 ;
int sum = 0 ;
while (sum<0){
i=i+1;
System.out.println(i);
}
System.out.println("----------------------");
do {
i = i + 1 ;
System.out.println(i);
i++;
}
while(sum<0);
}
}
运行结果:
--------------------- 1
可以看出,在执行while循环时,条件不成立就不执行。
而在do while循环时,至少会执行一次!!!
for循环
语法:
for(初始化 ; 布尔表达式 ; 更新){
//代码语句
}
注意事项:
-
最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
-
然后,检测布尔表达式的值,如果为true,循环体被执行。如果为false,循环终止。开始执行循环体后面的语句。
-
执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)/
-
再次检测布尔表达式,循环执行上面的过程。
-
练习1:计算0到100之间的奇数和偶数的和
package ShunXu;
public class ForDemo01 {
public static void main(String[] args) {
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 偶数之和为:2450
-
练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行 输出3个
package ShunXu;
public class ForDemo02 {
public static void main(String[] args) {
for (int i = 5; i <=1000; i++) {
if (i % 5 == 0){
System.out.print(i+"\t");
}
if (i % (5*3) ==0){
System.out.println();
}
}
}
}
运行结果为:
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 1000
-
练习3:打印九九乘法表
package ShunXu;
public class FoeDemo03 {
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();
}
}
}
运行结果为:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
增强型for循环
注意:
-
Java5 引入了一种主要用于数组或集合的增强型 for 循环
语法:
for(声明句子:表达式){
//代码句子
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
package ShunXu;
public class ForDemo04 {
public static void main(String[] args) {
int [] numbers = {10 , 20 , 30 , 40 ,50};
for(int x:numbers){
System.out.println(x);
}
}
}
运行结果:
10 20 30 40 50
它遍历了整个数组!
break continue
-
break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中的剩余语句(break语句在switch语句中使用。
-
continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
package ShunXu;
public class ContinueBreakDemo {
public static void main(String[] args) {
int i = 0;
while (i<100){
i++;
if(i%10==0){
System.out.println();
continue;
}
System.out.print(i);
}
}
}
运行结果:
123456789 111213141516171819 212223242526272829 313233343536373839 414243444546474849 515253545556575859 616263646566676869 717273747576777879 818283848586878889 919293949596979899
可以看出,continue用于终止某次循环,跳过循环体中尚未执行的语句,接着进行下一次循环。
打印三角形
package ShunXu;
public class Test02_1 {
public static void main(String[] args) {
for (int i = 1; i <=5; i++) {
for (int j=5 ; i<=j ;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();
}
}
}
运行结果:
*
***
*****
*******
*********

浙公网安备 33010602011771号