Java流程控制和方法

Java流程控制和方法


Scanner对象

  • Java提供了一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。

  • 基本语法:

Scanner s = new Scanner(System.in);
  • 通过Scanner类的next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般 需要 使用 hasNext() 与 hasNextLine() 判断是否还有输入的数据。

  • next():

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

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

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

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

 1 package com.basic;
 2  3 import java.util.Scanner;
 4  5 public class Demo02 {
 6     public static void main(String[] args) {
 7  8         //创建一个扫描器对象,用于接收键盘数据
 9         Scanner scanner = new Scanner(System.in);
10 11         System.out.println("请输入内容:");
12 13         //判断用户有没有输入字符串
14         if (scanner.hasNext()){
15             String str = scanner.next();  //程序会等待用户输入完毕
16             System.out.println("输出的内容为:" + str);
17         }
18 19         //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
20         scanner.close();
21     }
22 }
  • nextLine():

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

    2. 可以获得空白。

 1 package com.basic;
 2  3 import java.util.Scanner;
 4  5 public class Demo03 {
 6     public static void main(String[] args) {
 7         Scanner scanner = new Scanner(System.in);
 8  9         System.out.println("请输入内容:");
10 11         if (scanner.hasNextLine()){
12             String str = scanner.nextLine();
13             System.out.println("输出的内容为:" + str);
14         }
15 16         scanner.close();
17     }
18 }
  • Scanner对象的其他使用

hasNextInt() 和 hasNextFloat()

 1 package com.basic;
 2  3 import java.util.Scanner;
 4  5 public class Dome04 {
 6     public static void main(String[] args) {
 7         int i;
 8         float f;
 9 10         Scanner scanner = new Scanner(System.in);
11 12         System.out.println("请输入整数:");
13 14         if (scanner.hasNextInt()){
15             i = scanner.nextInt();
16             System.out.println("整数数据:" + i);
17         }else {
18             System.out.println("输入的不是整数数据!");
19         }
20 21         System.out.println("请输入小数:");
22 23         if (scanner.hasNextFloat()){
24             f = scanner.nextFloat();
25             System.out.println("小数数据:" + f);
26         }else {
27             System.out.println("输入的不是小数数据!");
28         }
29 30 31     }
32 }

输入多个数字,并且求其总和平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果

 1 package com.basic;
 2  3 //输入多个数字,并且求其总和平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果
 4  5 import java.util.Scanner;
 6  7 public class Demo05 {
 8     public static void main(String[] args) {
 9         Scanner scanner = new Scanner(System.in);
10 11         double sum = 0;
12         int m = 0;
13 14         System.out.println("请输入数字:");
15         while (scanner.hasNextDouble()){
16             double x = scanner.nextDouble();
17             sum += x;
18             m++;
19         }
20 21         System.out.println(m + "个数的和为:" + sum);
22         System.out.println(m + "个数的平均数为:" + (sum/m));
23 24         scanner.close();
25     }
26 }

顺序结构

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

  • 顺序结构是最简单的算法结构。

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

选择结构

  • if 单选择结构

  • if 双选择结构

  • if 多选择结构

  • 嵌套的 if 结构

 1 package com.basic;
 2  3 //if...else
 4  5 public class Demo06 {
 6     public static void main(String[] args) {
 7         int a = 99;
 8         if (a > 100){
 9             System.out.println("a > 100");
10         }else if(a == 100){
11             System.out.println("a = 100");
12         }else {
13             System.out.println("a < 100");
14         }
15     }
16 }
  • switch多选择结构

 1 package com.basic;
 2  3 //switch选择结构
 4  5 public class Demo07 {
 6     public static void main(String[] args) {
 7         int m = 2;
 8         switch (m){
 9             case 1:
10                 System.out.println("m = 1");break;
11             case 2:
12                 System.out.println("m = 2");break;
13             case 3:
14                 System.out.println("m = 3");break;
15             default:
16                 System.out.println("m = 4");
17         }
18     }
19 }

循环结构

  • while循环

  • do...while循环:至少执行一次循环体

  • for循环

  • 在Java5中引用了一种主要用于数组的增强型for循环:foreach

 1 package com.basic;
 2  3 //foreach循环
 4  5 public class Demo08 {
 6     public static void main(String[] args) {
 7         int[] a = new int[]{1,2,5,6,4,3};
 8         for (int i :a) {
 9             System.out.println(i);
10         }
11     }
12 }
  • for循环嵌套打印九九乘法表

 1 package com.basic;
 2 //打印九九乘法表
 3 public class Demo09 {
 4     public static void main(String[] args) {
 5         for (int i = 1; i < 10; i++){
 6             for (int j = 1; j <= i; j++){
 7                 System.out.printf("%d×%d=%d",j,i,i*j);
 8                 System.out.print("  ");
 9             }
10             System.out.println();
11         }
12     }
13 }

break continue

  • break在任何循环语句的主体部分,均可用break控制循环的流程。breake用于强制退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)

  • continue语句在用在循环体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

流程控制练习

  • 打印三角形

 1 package com.basic;
 2  3 //打印三角形
 4  5 import java.util.Scanner;
 6  7 public class Demo10 {
 8     public static void main(String[] args) {
 9         Scanner scanner = new Scanner(System.in);
10         int n = 0;
11 12         System.out.println("请输入行数:");
13         if (scanner.hasNextInt()){
14             n = scanner.nextInt();
15         }
16         for (int i = 1; i <= n; i++){
17             for (int j = n; j >= i; j--){
18                 System.out.print(" ");
19             }
20             for (int k = 1; k <= i; k++){
21                 System.out.print("*");
22             }
23             for (int m = 1; m <i; m++){
24                 System.out.print("*");
25             }
26             System.out.println();
27         }
28     }
29 }

方法

定义

  • Java方法是语句的集合,它们在一起执行一个功能。

    • 方法是解决一类问题的步骤的有序组合

    • 方法包含于类或对象中

    • 方法在程序中被创建,在其他地方被调用

  • 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样有利于我们后期的扩展。

  • 方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

    • 修饰符:可选,定义该方法的访问类型。

    • 返回值类型:返回一个值。没有返回值时,用关键字void

    • 方法名:方法的名字。

    • 参数类型:形参和实参。

    • 方法体:方法体包含具体的语句,定义该方法的功能。

方法调用

  • 调用方法:对象名.方法名(实参列表)

  • Java支持两种调用方法的方式,根据方法是否返回值来选择。

    • 当方法返回一个值的时候,方法调用通常被当作一个值。

    • 如果方法返回值是void,方法调用一定是一条语句。

扩展:值传递和引用传递

方法的重载

  • 重载就是在一个类中,有相同的函数名称,但形参不同的函数。

  • 方法的重载的规则:

    • 方法名称必须相同。

    • 参数列表必须不同(个数不同、或类型不同、参数列表顺序不同等)。

    • 方法的返回类型可以相同也可以不相同。

    • 仅仅返回类型不同不足以成为方法的重载

命令行传参

  • 有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。

1 package com.basic;
2 3 public class Demo11 {
4     public static void main(String[] args) {
5         for (int i = 0; i < args.length; i++) {
6             System.out.println("args[" + i + "]" + "=" + args[i]);
7         }
8     }
9 }

可变参数

  • JDK1.5开始,Java支持传递同类型的可变参数给一个方法。

  • 在方法声明中,在指定参数类型后加一个省略号(...)

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

 1 package com.basic;
 2  3 //可变参数
 4  5 public class Demo12 {
 6     public static void main(String[] args) {
 7         printMax(12.5,11,13.14,5.26,15.5);
 8         printMax(new double[]{1,2,3});
 9     }
10 11     public static void printMax(double... numbers){
12         if (numbers.length == 0){
13             System.out.println("没有参数传递!");
14             return;
15         }
16 17         double result = numbers[0];
18 19         for (int i = 1; i < numbers.length; i++) {
20             if (numbers[i] > result){
21                 result = numbers[i];
22             }
23         }
24         System.out.println("最大值为:" + result);
25     }
26 }

递归

  • A方法调用B方法,我们很容易理解

  • 递归就是:A方法调用A方法!就是自己调用自己

  • 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的、规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程中所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合

  • 递归结构包括两个部分:

    • 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。

    • 递归体:什么时候需要调用自身方法

 1 package com.basic;
 2  3 //求n的阶乘
 4  5 public class Demo13 {
 6     public static void main(String[] args) {
 7         System.out.println(f(4));
 8     }
 9 10     public static int f(int n){
11         if (n == 1){
12             return 1;
13         }else {
14             return n*f(n-1);
15         }
16     }
17 }
posted @ 2022-04-13 23:00  Tombro  阅读(44)  评论(0)    收藏  举报