一、可变参数数组
数组的长度未知,例:未知长度数组内容求和
二、值传递和引用传递
1、值传递:
传递的是值,所以原来的值本身不会改变,所有的基本类型+String都属于值传递
2、引用传递:
传递的是地址,所以会对原来的内容有影响,所有引用数据类型都属于引用传递
3、实例
定义一个数组保存商品信息
定义添加商品、修改商品、删除、查询商品的方法 (自定义参数和返回值 需要就定义 不需要可以不定义)
1.添加商品
要求:
先判断下数组位置够不够用
,不够用需要扩容,添加前先判断商品是否存在,不存在方可添加
2.修改商品
要求:被被修改的商品必须在数组中存在才能修改
3.删除
要求:删除已存在的商品
4.查询
遍历数组,打印数组商品名
注意!!!当数组扩容或缩容时,names不再是names(地址改变了),需要重新接收数组
附代码如下:
import java.util.Arrays; import java.util.Scanner; public class work3 { public static void main(String[] args) { menu(); } //判断是否存在该商品,存在返回其下标,否则返回-1 public static int isCZ(String[] names,String name,int size){ for (int i = 0; i < size; i++) { if(names[i].equals(name)){ return i; } } return -1; } //添加商品:先判断需要添加的商品是否存在,然后看是否有位置;扩容或直接添加 public static String[] add(String[] names,String name,int size){ int cz = isCZ(names, name,size); if(cz==-1){ System.out.println("可以添加"); }else{ System.out.println("该商品已存在"); return names; } if(size==names.length){ names= Arrays.copyOf(names,names.length+1); } names[size]=name; return names; } //遍历输出 public static void pri(String[] names){ for (int i = 0; i < names.length; i++) { System.out.print(names[i]+"\t"); } System.out.println(); } //替换:先判断原商品是否存在,然后判断新商品是否已存在,然后进行替换(isCZ的返回值为原商品的下标) public static void change(String[] names,String name1,String name2,int size){ int a=isCZ(names,name1,size); if(a==-1){ System.out.println("您要替换的商品不存在"); return; } int b=isCZ(names,name2,size); if(b!=-1){ System.out.println("你要上架的新商品已存在"); return; } names[a]=name2; } //删除商品,判断是否有需要删除的商品,没有就返回,有就删除,其余位置向前移动,并缩容数组 public static String[] del(String[] names,String name,int size){ int a=isCZ(names,name,size); if(a==-1){ System.out.println("你想要删除的商品不存在"); return names; } for (int i = a; i <names.length-2; i++) { names[i]=names[i+1]; } names=Arrays.copyOf(names,names.length-1); return names; } //调用界面 public static void menu(){ String[] names={"苹果","香蕉","榴莲"}; int size=3; Scanner sc=new Scanner(System.in); w:while (true){ System.out.println("请输入操作\n1:是查询\t2:添加\t3:删除\t4:替换\t5:退出"); int m=sc.nextInt(); switch (m) { case 1: pri(names); break; case 2: System.out.println("请输入需要添加的商品:"); String n1 = sc.next(); names = add(names, n1, size); size=names.length; break; case 3: System.out.println("请输入需要删除的商品:"); String n2 = sc.next(); names = del(names, n2, size); size=names.length; break; case 4: System.out.println("请输入需要替换的商品:"); String n3 = sc.next(); System.out.println("请输入替换后的商品:"); String n4 = sc.next(); change(names, n3, n4, size); break; case 5: System.out.println("退出"); break w; default: System.out.println("输入错误!!!"); break; } } } }