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();
}
}
> 输出结果如下
![image.png](https://cdn.nlark.com/yuque/0/2022/png/13002623/1650699053966-da9a58a4-3bac-459a-8e95-864426f2453d.png#clientId=ue1f7fb73-7bb2-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u6ddd5116&margin=%5Bobject%20Object%5D&name=image.png&originHeight=184&originWidth=289&originalType=binary&ratio=1&rotation=0&showTitle=false&size=7909&status=done&style=none&taskId=u79af5f18-f2a6-43c7-9377-0ddedcd8cad&title=)
- 用户输入计算输出demo
```java
package 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. 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,已选择对应的方法,如果匹配失败,则编译器报错。
```java
package 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. 递归体:什么时候调用自身
```java
package 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类
![image.png](https://cdn.nlark.com/yuque/0/2022/png/13002623/1650708778054-fd4155ac-0f4c-4dfb-83ba-5d35ebbf343e.png#clientId=ubb5738ae-d5c0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=638&id=u453bfee0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=957&originWidth=2297&originalType=binary&ratio=1&rotation=0&showTitle=false&size=237480&status=done&style=none&taskId=ud39a19a7-a838-45d9-be1f-f78f878ace6&title=&width=1531.3333333333333)
<a name="VujsD"></a>
### 冒泡排序
```java
package 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; // 无法访问