二维数组
二维数组的元素都是一维数组
语法
1.1 数据类型[][]
数组名称 = new 数据类型[m][n];
m: 二维数组length 代表二维数组里面有m个元素(一维数组)
n: 一维数组的length 代表二维数组里面每个一维数组里有n个数据。
1.2 数据类型[][]
数组名称 = new 数据类型[m][];
m: 二维数组length 代表二维数组里面有m个元素(一维数组)
1.3 数据类型[][]
数组名称 = {{元素1},{},{},{}};
1.4 数据类型[][]
数组名称 = new 数据类型[][]{{元素1},{},{},{}};
操作数组元素
获取二维数组的元素 index >=0 <length
遍历数组
package com.javasm.twoarray;
import java.util.Arrays;
public class ArrayDemo {
public static void main(String[] args) {
//1.创建二维数组
int[][] scores = new int[4][3];
System.out.println("二维数组长度:"+scores.length);//4
//获取二维数组的元素
// scores[0] = new int[3]; 初始化
//存储元素
//第一个一维数组 第一个元素
scores[0][0] = 100;
//第3个一维数组 第2个元素
scores[2][1] = 90;
System.out.println(scores[0][0]);
System.out.println(scores[1]);
System.out.println(scores[2]);
System.out.println(scores[3]);
System.out.println(scores);//[[I@60f82f98
// System.out.println(Arrays.toString(scores));
System.out.println(Arrays.deepToString(scores));
//遍历
// for(int index = 0,len = scores.length;index<len;index++) {
// int[] sc = scores[index];
// for(int in=0,len1 = sc.length;in<len1;in++) {
// System.out.println("第"+(index+1)+"一维数组的第"+(in+1)+"元素数据:"+sc[in]);
// }
// System.out.println("-------------------------------------");
// }
int count1 = 1;
for(int[] arr:scores) {
int count2 =1;
for(int sc:arr) {
System.out.println("第"+count1+"一维数组的第"+count2+"元素数据:"+sc);
count2++;
}
count1++;
System.out.println("-----------------------");
}
}
}
案例
动态录入班级数,班级学生数,以及每个学生的成绩。
遍历输出每个学生的成绩。
package com.javasm.twoarray;
import java.util.Arrays;
import java.util.Scanner;
public class ArrayDemo4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请录入班级数:");
int classCount = input.nextInt();
int[][] classRoom = new int[classCount][];//null
//录入每个班级的学生量
for(int index = 0;index<classCount;index++) {
System.out.println("请录入第"+(index+1)+"个班级的学生数:");
int studentCount = input.nextInt();
//初始化二维数组的元素
classRoom[index] = new int[studentCount];
//录入每个学生的成绩
for(int index1 = 0;index1<studentCount;index1++) {
System.out.println("请录入第"+(index+1)+"个班级,第"+(index1+1)+"学生的成绩");
int studentScore = input.nextInt();
//存储到数组里面
classRoom[index][index1] = studentScore;//npe
}
}
System.out.println(Arrays.deepToString(classRoom));
}
}
方法(功能)
方法的组成部分
1.1. 访问权限修饰符 public private protected 缺省
1.2. 普通修饰符 static(静态) abstract(抽象) final(最终)
1.3. 返回值数据类型
分为2类:
无返回值数据类型 void 无返回值不能用在输出语句里
有返回值数据类型 基本+引用
1.4. 方法名(目前唯一的)
1.5. 形式参数(形参)
无参
有参:任意类型 基本+引用
字面量: 值传递
引用: 引用传递
1.6. 方法体{ }
定义(创建)方法
方法与方法是同级的关系。
结合返回值和形式参数进行方法分类:
2.1 无参无返回值
package com.javasm.method;
import java.util.Arrays;
public class MethodDemo {
public static void noArgsNoReturn1() {
int num = 100;
System.out.println(num);
}
// 创建无参无返回值方法
public static void noArgsNoReturn() {
System.out.println("这是一个无参无返回值方法。。。。。noArgsNoReturn");
return;
}
// 主方法(函数)
public static void main(String[] args) {
System.out.println("main.....开始执行");
// 方法调用
noArgsNoReturn();
System.out.println("main.....执行结束");
}
}
2.2 无参有返回值
package com.javasm.method;
import java.util.Arrays;
public class MethodDemo2 {
// 创建无参有返回值方法
public static String noArgsWithReturn() {
System.out.println("这是一个无参有返回值方法。。。。。noArgsWithReturn");
int[] nums = {10,2,3};
// System.out.println(Arrays.toString(nums));
// System.out.println(Arrays.sort(nums));
return "hello";
}
// public static boolean register() {
// //
// return true;
// }
// 主方法(函数)
public static void main(String[] args) {
System.out.println("main.....开始执行");
// 方法调用
String result = noArgsWithReturn();
// System.out.println(noArgsWithReturn());
System.out.println("返回的内容:"+result);
System.out.println("main.....执行结束");
}
}
2.3 有参无返回值
package com.javasm.method;
public class MethodDemo3 {
// 创建有参无返回值方法
// 判断卡号是否是一个4为整数
// cardNo 形式参数 也是一个局部变量
public static void withArgsNoReturn(int cardNo) {
if (cardNo < 1000 || cardNo > 10000) {
System.out.println("卡号不合法。。。。");
return;
}
System.out.println("是一个合法的卡号。。。。" + cardNo);
// 抽奖
}
// 登陆
// admin 1234
public static void userLogin(String name, int pass) {
if (name == null) {
System.out.println("数据不能为null");
return;
}
if (!name.equals("admin") || pass != 1234) {
System.out.println("用户名或者密码不正确");
return;
}
// 登陆成功
System.out.println("欢迎你:" + name);
}
// 登陆1
// 使用可变参数 数据类型...变量名
// 就是一个数组 >=0实际参数
public static void userLogin1(int num, String... params) {
if (params.length == 0) {
System.out.println("数组里面没有元素");
return;
}
for (String str : params) {
System.out.println(str);
}
}
// 将数组元素为null修改成 hello
public static void test(String[] strs,String name1) {// 3 1
if (strs == null) {
System.out.println("数据不能为null");
return;
}
int len = strs.length;
if (len == 0) {
System.out.println("数组里面没有元素");
return;
}
name1 = "tom";
for (int index = 0; index < len; index++) {
if (strs[index] == null) {
strs[index] = "hello";
}
}
}
public static void main(String[] args) {
String[] values = new String[3];
values[0] = "abc";
String name = "jim";
test(values,name);
System.out.println(name);
/*String n = "a";
String m = n;
n = "b";
System.out.println(m);
System.out.println(n);*/
// userLogin(null, 1234);
// System.out.println("main.....开始执行");
// 实际参数
// withArgsNoReturn(num);
// String name = "admin";
// int password = 1234;
// userLogin(name,password);
// userLogin1(100);
// userLogin1(100,"hello","wolrd","abc");
// System.out.println(Arrays.toString(values));
System.out.println("main.....执行结束");
}
}
2.4 有参有返回值
package com.javasm.method;
public class MethodDemo4 {
// 创建有参有返回值方法
public static void main(String[] args) {
String username = "admin";
String password = "1234";
if(!withArgsWithReturn(username,password)) {
System.out.println("登陆失败。。。。不能操作数据");
return;
}
//
System.out.println("success。。。。。");
}
public static boolean withArgsWithReturn(String name,String pass) {
if(name==null || pass==null) {
// System.out.println("数据不允许为null");
return false;
}
if(!name.equals("admin") || !pass.equals("1234")) {
// System.out.println("登陆失败");
return false;
}
return true;
}
}
方法调用
在方法里面调用方法的逻辑。
3.1 调用无参无返回值
方法名();
3.2 调用无参有返回值方法
1. 方法名();
2. 返回值数据类型 变量 = 方法名();
3.3 调用有参无返回值
1.方法名(实际参数1,实际参数2,实际参数3…);
实参数据类型与形参类型保持一致。
3.4 调用有参有返回值
方法重载 overload
1.方法名一致 sort
2.形参类型不同 可以排序整形字符等数组
3.不考虑返回值和修饰符