①一维数组中每一个元素,存储的就是一个数据
②二维数组中的每一个元素,存储的就是一个一维数组
1.1创建二维数组
动态初始化
语法:数据类型[ ] [ ]数组名=new 数据类型[二维数组的长度] [一维数组的长度]
注意:在创建二维数组的时候,二维数组的长度必须是要指定的,而一维数组的长度暂时可以不确定。
静态初始化
语法:数据类型[] []数组名={{元素1,元素2},{元素1,元素2,元素3},{},{}}
1.3二维数组的遍历
public class demo8 {//二维数组遍历
public static void main(String[] args) {
int [][] arr={{11,22,33},{66,88},{111,88,77}};
for (int i = 0; i < arr.length; i++) {
//arr[i]是一个一维数组
//在循环遍历一维数组
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
}
}
}
1.4二维数组的应用
杨辉三角的实现
public class demo9 {
public static void main(String[] args) {
//使用二维数组实现杨辉三角
/*
* *
* arr[0][0]
arr[1][0]
arr[2][0]
arr[3][0]
*
* {{1},{1,1},{1,2,1},{1,3,3,1}} 组成了杨辉三角
* */
//定义一个一维数组
int[][] yhArr=new int[5][];
//对二维数组进行赋值
for (int i = 0; i < yhArr.length; i++) {
//对一维数组进行赋值
yhArr[i]=new int[i+1];
for (int j = 0; j < yhArr[i].length; j++) {
if (j==0 || i==j) {
yhArr[i][j]=1;
}else{
yhArr[i][j]=yhArr[i-1][j-1] + yhArr[i-1][j];
}
}
}
for (int i = 0; i < yhArr.length; i++) {
for (int j = 0; j < yhArr.length-1; j++) {
System.out.print("\t");
}
for (int j = 0; j < yhArr[i].length; j++) {
System.out.print(yhArr[i][j]+"\t");
}
System.out.println();
}
}
}
2,可变参数
可变参数:jdk1.5之后新的语法
语法:数据类型...参数名
特点:
①带有可变参数方法调用的时候,实参个数可以是0个或者多个
②可变参数只能放在参数列表的最后(一个方法只能有一个可变参数)
③可变参数可以当作数组来使用,也可以将数组变为参数使用
2.1可变参数的方法定义
public static void m1(int... a){
System.out.println(a);
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
}
2.2可变参数方法的调用
public static void main(String[] args) {
m1(1,2,3,4,5,6,7);
int[] arr={1,2,3};
m1(arr);
}
例子:案例
public class demo7 {//根据用户传来的数字,进行求和 数字不确定
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(sum(arr));
}
public static int sum(int... arr){
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum = sum+arr[i];
}
return sum;
}
}
3,值传递和引用传递
①值传递:传递的是值,所以原本的值本身不会改变,所有的基本类型+String都是属于值传递
②引用传递:传递的是地址,所以会对原来的内容有影响,所有的引用数据类型都属于引用传递
public class demo7 {
public static void main(String[] args) {
int a = 10;
System.out.println("传递之前a的值"+a);
m1(a);
System.out.println("传递之后a的值"+a);
System.out.println("---------------------------");
String name = "cxk";
System.out.println("传递之前的名字:"+name);
m2(name);
System.out.println("传递之后的名字"+name);
System.out.println("----------------------------");
double[] d = {1,2,3};
System.out.println("传递之前d[0]的值:"+d[0]);
m3(d);
System.out.println("传递之后d[0]的值:"+d[0]);
//通过变量形式传递
int c=10;
int b=c;
b=20;
System.out.println(c);
String s="a";
String s1=s;
s1="b";
System.out.println(s);
}
public static void m1(int a){
a=20;
}
public static void m2(String name){
name = "李明";
}
public static void m3(double[] d){
d[0]=100;
}
}
4,综合案例
public class ProductManager {
//实现商品的增删改查
//定义成员变量表示商品的名称信息
static String[] names={};
//定义成员变量表示商品在数组中的有效个数
static int size=0;
static Scanner sc=new Scanner(System.in);
//判断指定商品是否存在
public static int index(String name){
for (int i = 0; i <size ; i++) {
if (name.equals(names[i])){
return i;
}
}
return -1;
}
//增加商品
public static void addProduct(String name){
//判断数组容量是否足够
if (size==names.length){
names= Arrays.copyOf(names,names.length+5);
}
//判断商品是否存在
int index=index(name);
if (index!=-1){
System.out.println("商品已存在,无法添加");
}else {
names[size]=name;
//每次添加元素之后 有效个数+1
size++;
}
}
//删除商品
public static void deleteProduct(String name){
//1.判断商品是否存在
int index = index(name);
if (index==-1){
System.out.println("你要删除的商品不存在");
}
//判断特殊情况,当元素个数刚好为5的时候
if (size%5==0){
names = Arrays.copyOf(names, names.length + 5);
}
//2.将原数组商品删除掉
for (int i = index; i <size; i++) {
names[i]=names[i+1];
}
//3.有效个数-1
size--;
}
//修改商品
public static void updateProduct(String oldName,String newName){
//1.判断是否存在
int index = index(oldName);
if (index==-1){
System.out.println("你要修改的商品不存在");
}
//2.判断新名字是否存在
if (index(newName)!=-1){
System.out.println("你要修改的名字已经存在无法修改");
return;
}
//3修改商品名称
names[index]=newName;
}
//查询商品
public static void selectProduct(){
if (names.length==0){
System.out.println("暂无商品,等待添加");
}else {
for (int i = 0; i <size ; i++) {
System.out.print(names[i]+"\t");
if (i!=0&& i%5==0){
System.out.println();
}
}
System.out.println();
}
}
//未来就对应前端页面
public static void menu(){
System.out.println("欢迎进入商品管理系统");
while (true){
System.out.println("1.增加 2.删除 3.修改 4.查询 5.退出");
int num= sc.nextInt();
switch (num){
case 1:
System.out.println("请输入你要增加商品名称");
String addName = sc.next();
addProduct(addName);
break;
case 2:
System.out.println("请输入你要删除的商品名称");
String delName=sc.next();
deleteProduct(delName);
break;
case 3:
System.out.println("请输入你要修改商品名称");
String oldName=sc.next();
System.out.println("请输入修改后商品名称");
String newName=sc.next();
updateProduct(oldName,newName);
break;
case 4:
selectProduct();
break;
case 5:
System.out.println("欢迎下次使用");
return;
default:
System.out.println("你输入的数字有误,请重新输入");
}
}
}
public static void kaiGuang() {
System.out.println(" _oo0oo_");
System.out.println(" o8888888o");
System.out.println(" 88\" . \"88");
System.out.println(" (| -_- |)");
System.out.println(" 0\\ = /0");
System.out.println(" ___/`---'\\___");
System.out.println(" .' \\| |// '.");
System.out.println(" / _||||| -:- |||||- \\");
System.out.println(" | | \\\\\\ - /// | |");
System.out.println(" | \\_| ''\\---/'' |_/ |");
System.out.println(" \\ .-\\__ '-' ___/-. /");
System.out.println(" ___'. .' /--.--\\ `. .'___");
System.out.println(" .\"\" '< `.___\\_<|>_/___.' >' \"\".");
System.out.println(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | |");
System.out.println(" \\ \\ `_. \\_ __\\ /__ _/ .-` / /");
System.out.println(" =====`-.____`.___ \\_____/___.-`___.-'=====");
System.out.println(" `=---='");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ");
System.out.println(" 佛祖保佑 永无BUG ");
menu();
}
public static void main(String[] args) {
kaiGuang();
}
}