用户交互Scanner以及三种结构详解!!!

用户交互Scanner

Scanner对象

  • Java给我们提供了一个工具类,来获取用户的输入。

  • java.util.Scanner是java5的新特性

  • 我们可以通过Scanner类来获取用户的输入

基本语法

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(初始化 ; 布尔表达式 ; 更新){
    //代码语句
}

注意事项:

  1. 最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。

  2. 然后,检测布尔表达式的值,如果为true,循环体被执行。如果为false,循环终止。开始执行循环体后面的语句。

  3. 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)/

  4. 再次检测布尔表达式,循环执行上面的过程。

 

  • 练习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();
        }
    }
}

运行结果:

     *
    ***
   *****
  *******
 *********

 

 

posted @ 2021-01-26 20:49  猫凹酱  阅读(230)  评论(0)    收藏  举报