用户交互Scanner

Java.util.Scanner 是java5的新特征,可通过Scanner类来获取用户的输入

基本语法


Scanner s =new Scanner (System.in);


通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前需要使用hasNext()有空格就不往下读了

与hasNextLine()判断是否还有输入往下读完判断是否还有输入数据,

import java.util.Scanner;

public class Dome01 {
   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()

  1. 一定要读取到有效的字符后才可以结束输入

  2. 对输入的有效字符之间遇到的空白,next()方法会自动将其去掉

  3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符

  4. next()不能得到带有空格的字符串

nextLine()

  1. 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。

  2. 可以获得空白

import java.util.Scanner;

public class Demo02 {
   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();
  }
}

顺序结构

  1. java的基本结构就是顺序结构,除非特别指明,否则就按照一句一句执行

  2. 顺序机构是最简单的算法结构

05java流程控制_java

  1. 语句与语句之间,框与框之间是按从上到下的顺序进行的,由若干个依次执行的处理步骤组成,他是任何一个算法都离不开的基本算法结构

 

选择结构

if单选择结构

  1. 判断一个东西是否可行,然后才去执行,

  2. 语法

    if(布尔表达式){

    //如果布尔表达式为true将执行的语句

    }

import java.util.Scanner;

public class Demo03 {
  public static void main(String[] args){
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入内容");
      String s = scanner.nextLine();
      if(s.equals("Hello")) {
          System.out.println(s);

      }
      System.out.println("End");
      scanner.close();
  }
}

if双选结构

  1. 语法

    if(布尔表达式){

    //如果布尔表达式的值为true

    }else{

    //如果不二表达式的值为false

    }

05java流程控制_java_02

public class Demo03 {
  public static void main(String[] args){
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入内容");
      int s = scanner.nextInt();
      if(s>60) {
          System.out.println(s);
      }else{
      System.out.println("End");}
      scanner.close();
  }
}

if多选择机构

  1. 语法

    if(){

    }else if(){

    }else if(){

    }......

    {

    }else

public class Demo03 {
  public static void main(String[] args){
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入内容");
      int s = scanner.nextInt();
      if(s>80) {
          System.out.println(s);
      }else if(s>60&&s<80){//不严谨
      System.out.println("及格");}
      else{
          System.out.println("不及格");
      }
      scanner.close();
  }
}

if嵌套语句

语法

if(){

if(){

}

}

public class Demo03 {
  public static void main(String[] args){
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入内容");
      int s = scanner.nextInt();
      if(s<80) {
          if (s > 60) {
              System.out.println("及格");
          }
          System.out.println("不及格"+s);
      }
      scanner.close();
  }
}

switch多选择结构

  1. 多选择结构 switch case

  2. switch case 语句判断一个变量与一系列值中某个值是否相等,每个值成为一个分支

  3. switch语句中的变量类型可以是(byet ,short ,int,char,string)

  4. 语法

    switch (expressio){

    case value1:

    语句1

    break;

    case value2

    语句2

    break;

    ......

    default;

    语句n

    }

    public class Demo04 {
      public static void main(String[] args) {
          String grade="c";
          //case具有穿透性
          switch (grade){
              case "a":
                  System.out.println("1");
                  break;
              case "b":
                  System.out.println("2");
                  break;
              case "c":
                  System.out.println("3");
                  break;

              default:
                  System.out.println("4");
          }
      }
    }

String是jdk7才能用的

但是字符的本质还是数字

//反编译 java---class()

public class Demo04 {
  public Demo04() {
  }
//反编译,对比上面出现了好多东东哦
  public static void main(String[] args) {
      String grade = "猫";
      byte var3 = -1;
      switch(grade.hashCode()) {//每个字都有一个hashCode,通过hashCode对比来判断是否相同
      case 21862:
          if (grade.equals("啦")) {
              var3 = 0;
          }
          break;
      case 22815:
          if (grade.equals("够")) {
              var3 = 1;
          }
          break;
      case 29483:
          if (grade.equals("猫")) {
              var3 = 2;
          }
      }

      switch(var3) {
      case 0:
          System.out.println("为i");
          break;
      case 1:
          System.out.println("反扑");
          break;
      case 2:
          System.out.println("猫");
          break;
      default:
          System.out.println("4");
      }

  }
}

循环结构

while循环

  1. 结构

    while(布尔表达式){

    //循环内容

    }

  1. 只要表达式为ture,循环会一直执行

  2. 大多数情况是想让循环停下来

  3. 少部分需要一直执行,如服务器的请求响应

  4. 循环条件一直为ture会造成无限循环(死循环)

  5. 例题,计算1+2+3+....100=

public class Dome01 {
  public static void main(String[] args){
      int i=0;
      int a;
      a=0;

      while (i<100){
          i++;
          System.out.println(i);
          a=a+i;
          System.out.println(a);
      }
  }
}

do...while循环

  1. 至少执行一次

  2. 语法

    do{

    }while(布尔);

While和do-while的区别
  1. while先判断后执行,do while 是先执行后判断

  2. do while 保证循环体至少被执行一次

public class Dome02 {
  public static void main(String[] args) {
      int i=0;
      int sum=0;
      do {
          i++;
          System.out.println(i);
          sum=sum+i;
          System.out.println(sum);
      }while (i<=99);//i<100都可
  }
}

for循环

重要

  1. 虽然所有的循环都可以使用while和do-while表示,但是还提供了for循环,使结构变得更简单

  2. for循环语句是支持迭代的一种通用结构,最有效,最灵活的循环结构

  3. for循环执行的次数是在执行前就确实的

  4. 语法

for(初始化;布尔表达式;更新){

//代码

}

 

  • 计算0到100之间的奇数和偶数的和

    //偶数
    public class Demo03 {
      public static void main(String[] args) {
          int sum;
          sum=0;
          for (int i=0;i<100;i=i+2){
              System.out.println(i);
              sum=sum+i;
              System.out.println(sum);
          }
      }
    }
    //奇数
    public class Demo03 {
      public static void main(String[] args) {
          int sum;
          sum=0;
          for (int i=1;i<100;i=i+2){
              System.out.println(i);
              sum=sum+i;
              System.out.println(sum);
          }
      }
    }
  • 用while或for循环输出1-1000之间能被3整除的数,每行三个

    public class Demo03 {
      public static void main(String[] args) {
          int sum;
          sum=0;
          for (int i=0;i<1000;i++){
              if(i%5==0) {
                  System.out.print(i+" ");
              }
              if(i%(5*3)==0){
                  System.out.print("\n");
              }
          }
      }
    }
  • 九九乘法表

public class Dome04 {
  public static void main(String[] args) {
      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();
      }
  }
}

在java5中引入了一种主要用于数组的增强型for循环

  1. 语法

    for(声明语句:表达式){

    //代码语句

    }

  1. 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等

  2. 表达式:是要访问的数组名,或返回值为数组的方法

public class Demo05 {
  public static void main(String[] args) {
      int[] n = {1, 2, 3, 4, 5, 6, 7};
      //遍历数组
      for (int x : n) {
          System.out.println(x);
      }
      for (int i=0;i<n.length;i++){
          System.out.println(n[i]);
      }
  }
}

break continue

一、break和continue的作用   break和continue都是用来控制循环结构的,主要作用是停止循环。

二、break和continue的区别 1、break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可结束其外层循环。

注意: (1)只能在循环体内和switch语句体内使用break。 (2)不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。 (3)当break出现在循环体中的switch语句体内时,起作用只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。

2、continue语句的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为只是中止(跳过)本次循环,接着开始下一次循环。

注意: (1)continue语句并没有使整个循环终止。 (2)continue 只能在循环语句中使用,即只能在 for、while 和 do…while 语句中使用。

三、案例分析 案例一

public class Demo05 {
  public static void main(String[] args) {
      for(int i=0; i<12; i++){
          if(i==5){
              break;
          }
          System.out.print(i+" ");
      }
  }
}
运行结果:
0 1 2 3 4
程序分析:
①程序输出了01234 到5的时候跳出了循环。
②break语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即:不是跳到下一个循环周期而是退出循环。如果break语句包含在嵌套循环里,它只跳出最里面的循环。

案例二

public class Demo05 {
  public static void main(String[] args) {
      for(int i=0; i<12; i++){
          if(i==5){
              continue;
          }
          System.out.print(i+" ");
      }
  }
}
运行结果:
0 1 2 3 4 6 7 8 9 10 11
程序分析:
①可以看到只有5没有输出,也即当i=5时没有执行打印操作,直接到下一次循环。
②循环语句里有continue语句时,程序运行到此语句时,不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环。

关于goto

goto关键字,用来改变函数内代码的执行顺序,跳转到函数内指定的标签地方运行,goto不能跨函数代码块跳转。java无goto

练习

打印三角

public class Triangle {
  public static void main(String[] args) {
      for (int i = 1; i <= 5; i++) {
          for (int i1 = 5; i1 >= i; i1--) {
              System.out.print(" ");
          }
          for (int i1=1;i1<=i;i1++){
              System.out.print("*");
          }
          for (int i1=1;i1<i;i1++){
              System.out.print("*");
          }
          System.out.println();
      }
  }
}
 *
***



笑死,这个MarkDowm把我的*号直接给翻成线了