一、流程控制
1.1 用户交互Scanner
java.util.Scanner jdk5的新特征
用于获取用户的输入
// 创建一个扫描器对象,用于接收键盘数据
Scanner sr = new Scanner(System.in);
// 使用next获取字符串,不能字符串中没有空格,有空格结束。
String name = sr.next();
// 接收字符串,以enter结束,字符串中可以带有空格。
String address = sr.nextLine();
// 关闭IO流,以达到节约资源
sr.close;
// 接收整数、浮点类型
int i = sr.nextInt();
double d = sr.nextDouble();
1.2 顺序结构
java的基本结构是顺序结构,就一条一条的执行。从上到下的顺序进行。依次执行。
1.3 选择结构
- if单选泽结构
- if双选择结构
- if多选择结构
- 嵌套的if结构
- switch多选择结构
switch(expression){
case value:
//语句
}
switch语句中变量类型可以是:
byte、short、int或者char
从Java SE 7 支持String类型,同时case标签必须为字符串常量或者字面量。
1.4 循环结构
-
while 循环
while(布尔表达式) { // 循环语句 }
-
do…while循环
do { // 循环语句 }while(布尔表达式);
-
for 循环
for(初始化;布尔表达式;循环控制变量){ // 循环体 }
-
Java 5中引用了用于数组的增强型for循环
for(声明语句 : 表达式){ // 循环体 } int[] numbers = {15,12,30,50}; for(int i : numbers) { System.out.println(i); }
1.5 break & continue
break 终止循环
continue 终止本次循环
二、方法详解
2.1 什么是方法
是一段用来完成特定功能的代码片段
2.2 方法定义以及调用
修饰符 返回值类型 方法名(参数类型 参数名){
// 方法体
return 返回值;
}
方法的调用
对象名.方法名(实参列表);
java是值传递
2.3 方法重载
(在一个类中)
规则
- 方法名称必须相同。
- 参数列表必须不同(个数不同、或者类型不同、参数排列顺序不同等)。
- 方法的返回类型可以相同也可以不相同。
- 仅仅返回类型不同不足以成为方法的重载。
2.4 命令行传参
靠传递命令行参数给main() 函数实现。
2.5 可变参数
jdk1.5的开始使用。
- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public static void printMax(int ... numbers) {
if(numbers.length == 0) {
System.out.println("No argument passed");
return ;
}
int result = numbers[0];
// 排序
for(int i=1; i< numbers.length; i++) {
if(numbers[i] > result) {
result = numbers[i];
}
}
System.out.println("The Max value is " + result);
}
2.6 递归
递归包括两个部分:递归头、递归体。
自己调用自己。
// 递归 5阶乘
public class DiGui {
public static void main(String[] args) {
DiGui di = new DiGui();
System.out.println(di.dg(5));
}
private int dg(int i) {
if(i ==1 ){
return 1;
} else {
return dg(i-1)*i;
}
}
}
三 、数组
3.1 数组概述
- 相同类型数据的有序集合。
- 数组中每个数据成为元素,通过下标访问元素。(下标是从0开始的)
3.2 数组声明创建
数组的类型 数组的名字 = 变量的值
// 定义有10个元素的一维数组
int[] arr = new int[10];
使用length可以得到数组的长度。
java内存分析:
静态初始化
int[] a = {1,2,3};
Food[] foods = {new Food("白菜","萝卜"),new Food("云","水")};
动态初始化
int[] a = new int[3];
a[0] = 1;
a[2] = 3;
数组的特点:
- 数组的长度是确定的,一旦创建,它的大小就不能改变。
- 元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
- 数组变量属引用类型,数组也可以看成是对象。
3.3 数组使用
public class Arrays {
public static void main(String[] args) {
int[] a = {10,8,3,2,1};
Arrays.printArr(a);
System.out.println();
a = reArry(a);
Arrays.printArr(a);
}
// 进行数组翻转
public static int[] reArry(int[] result) {
int[] b = new int[result.length];
for(int i=0, j=result.length-1; j>=0; i++,j--) {
b[i] = result[j];
}
return b;
}
// 输出数组
public static void printArr(int[] arrys) {
for(int k : arrys) {
System.out.print(k + " ");
}
}
}
3.4 多维数组
多维数组是由一维数组组成的,其每一个元素都是一个一维数组。
int[][] a = new int[3][2];
3.5 Arrays类
Arrays工具类在java.util.Arrays下
通过查看API可以使用相应的类的方法。(在那里之前,我们需要导入相应的类)
冒泡排序:
// 冒泡排序
/*
* 1、比较数组中,两个相邻的元素,如果第一个比第二个元素大,就交换元素。
* 2、每一次比较,都会产生出一个最大,或者最小的数字
* 3、下一轮则可以少一次排序
* 4、依次循环,直到结束。
*/
public static int[] sort(int[] arr) {
for(int i = 0; i < arr.length-1; i++) {
// 用flag标识减少没有意义的比较,可以用提高效率。
boolean flag = false;
for(int j=0; j < arr.length - i -1; j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = true;
}
}
if (flag == false) {
break;
}
}
return arr;
}
3.6 稀疏数组
一个数组中大部分元素是0,或者同一值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方式是:
- 记录数组一共有几行几列,有多少个不同值。
- 把具有不同值的元素和行列以及值记录在一个小规模的数组中,从而缩小程序的规模。
左边为原始数组,右边表稀疏数组。(进行的压缩,以达到节省空间的效果)
- 原始数组转为稀疏数组的步骤:
- 获取有效值的个数
- 创建一个稀疏数组的数组
- 遍历原始数组,把其中非零的值存放在稀疏数组中