Scanner
- java.util.Scanner人机交互的工具类,可以通过Scanner获取用户的输入
- 基本语法
Scanner s = new Scanner(System.in); - 通过Scanner类的
next()与nextLine()方法获取输入的字符串,在读取前,一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。 ```java package com.java.base; import java.util.Scanner;
public class Scan { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println(“请输入:”); // next 方法中间输入的空格后面的会忽略掉 / 其他的有: hasNextInt() hasNextFloat() 🤖….. / if (scanner.hasNextLine()) { String str = scanner.nextLine(); System.out.println(“输出内容为:” + str); }
scanner.close();}
}
> 输出结果如下- 用户输入计算输出demo```javapackage com.java.base;import java.util.Scanner;public class Scanplus {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 += x;}System.out.println(m + "个数字的和"+ sum);System.out.println(m + "个数字的平均" + sum/m);scanner.close();}}
流程
顺序结构
- java的基本结构就是顺序结构,除非特殊指明,否则就按照顺序一句一句执行
- 顺序结构是最简单的算法结构
- 语句与语句之间,框与框之间是自上而下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构
选择结构
多选择结构
- if …else if…else
-
语法
for
- while
- do…while
- switch
- ….
方法
```java // 修饰符(可选) 返回值 方法名 (参数类型 参数名) {return 返回值;} public static void main(String[] args) {
}
<a name="Y3NWr"></a>### 方法的重载1. 重载就是在一个类中,有相同的函数名称,但形参不同的函数2. 方法重载的规则- 方法名称必须相同- 参数列表必须不同(个数不同、类型不同、参数的排列顺序不同等)- 仅仅返回类型不同不足以成为重载的方法3. 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,已选择对应的方法,如果匹配失败,则编译器报错。```javapackage com.java.base;/***/public class Reload {public static void main(String[] args) {double max = max(2.0, 2);System.out.println(max);}public static double max (double num1, double num2) {double res = 0.0;if(num1 == num2) {return 0;}if(num1 > num2) {res = num1;}else {res = num2;}return res;}public static int max (int num1, int num2) {int res = 0;if(num1 == num2) {return 0;}if(num1 > num2) {res = num1;}else {res = num2;}return res;}}
命令行传参
package com.java.base;public class Command {public static void main(String[] args) {for (int i = 0; i < args.length; i++) {System.out.println("args[" + i + "]:" + args[i]);}}}
编译java文件
> javac Command.java> cd src //切换到src目录下> java com.java.base.Command this is my args //<this is my args>为参数
可变参数
- 从java1.5开始,Java支持传递同类型的可变参数给一个方法
- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明 ```java package com.java.base;
public class Var { public static void main(String[] args) { Var var = new Var(); var.test(1, 11.0); } public void test(int x, double …i) { System.out.println(i[0]); } }
<a name="Iynfa"></a>### 递归- 调用方法自身(自己调自己)- 递归结构包含两个部分1. 递归头:什么时候不调用自身的方法。如果没有头,将陷入死循环2. 递归体:什么时候调用自身```javapackage com.java.base;public class Recursion {public static void main(String[] args) {System.out.println(f(5));}public static int f(int n) {if(n == 1) {return 1;}else {return n * f(n - 1);}}}
数组
// 变量类型 变量的名称 = 变量的值int[] nums; //声明一个数组// 数组类型int num2[];nums = new int[10]; //创建一个数组 10个元素大小的数组/*为数组元素赋值*/nums[0] = 1;nums[1] = 2;....nums[9] = 10;// int[] nums = new int[10];
基本特点
- 其长度是确定的,数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包扩基本类型和引用类型。
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中的对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中。 ```java package com.java.base;
public class Array { public static void main(String[] args) { int[] nums = {1, 2 ,3, 4, 5}; int[] res = reverse(nums); for (int i = 0; i < res.length; i++) { System.out.print(res[i]); } } public static int[] reverse(int[] arr) { int[] result = new int[arr.length]; for (int i = 0, j = arr.length -1; i < arr.length; i++, j—) { result[j] = arr[i]; } return result; } }
<a name="KOKtx"></a>### Arrays类<a name="VujsD"></a>### 冒泡排序```javapackage com.java.base;import java.util.Arrays;public class Array {public static void main(String[] args) {int[] nums = {7, 2 ,3, 4, 5};int[] popRes = popSort(nums);System.out.println(Arrays.toString(popRes));}public static int[] popSort(int[] arr) {int temp = 0;// 外层循环,判断要走多少次for (int i = 0; i < arr.length - 1; i++) {boolean flag = false; //通过flag减少没有意义的比较// 内层循环, 判断两个数字,如果第一个比第二个大,交换位置for (int j = 0; j < arr.length -1 - i; j++) {if(arr[j + 1] < arr[j]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;flag = true;}}if (flag) {break;}}return arr;}}
static关键字详解
private static int age; // 静态private double score; // 非静态Student s1 = new Student();s1.age;s1.score;Student.age;Student.score; // 无法访问
