注册 登录
编程论坛 JAVA论坛

为甚么字符串数组出了循环不能保存?

好烦、 发布于 2021-12-11 14:11, 2964 次点击
主函数大致如下:
程序代码:
package Student;
import java.util.*;
public class Main {
    public static void main(String[] args) throws Exception {
        Scanner input=new Scanner(System.in);
        Student[] sts = {
            new Student("101", "wang"),
            new Student("102", "li"), new Student("103", "zhang"),
            new Student("104", "qiao"), new Student("105", "wu") };
        while(true) {
            String[] in =input.nextLine().split("\\s+"); //正则表达式分割空格
            
// 操作
            if(in[0].equals("exit")) {
                System.out.println(sts.length);
                break;
            }   
            switch(in[0]) {
                case "add": Student.add(sts, in[1], in[2],true); break;
                case "delete": Student.delete(sts, in[1], in[2]); break;
                case "update": Student.update(sts, in[1], in[2]); break;
            }
        }
    }
}

Student.class如下:
程序代码:
package Student;
import import import java.util.Arrays;

class Student implements Comparable<Student>{
       private String sno;          //学号
       private String sname;        //姓名
       public Student(String sno,String sname){
         this.sno=sno;  this.sname=sname;
       }
       public String getSno()    { return this.sno;     }
       public String getSname(){ return this.sname; }
      
       public void updateName(String s) { sname=s;  }
       //
       public static void add(Student[] sts,String no,String name,boolean isPrint) throws Exception{
              // 检验该学生是否已经存在
           boolean isIn=false;
              for(int i=0;i<sts.length;i++)
                  if(no.equals(sts[i].getSno()))
                      isIn=true;
              if(isIn)
                  throw new Exception("无法新增,学号与已有学生信息重复");
              // 不存在则扩容并加入
           sts=Arrays.copyOf(sts, sts.length+1);
           sts[sts.length-1]=new Student(no,name);  
           if(isPrint)
               sortAndPrint(sts);
       }
       // sort的实现
       public int compareTo(Student a) {
           return Integer.parseInt(this.getSno())>=Integer.parseInt(a.getSno())? 1:-1;
       }
       // 排序输出
       public static void sortAndPrint(Student[] sts) {
           Arrays.sort(sts);
           for(int i=0;i<sts.length;i++)
               System.out.println(sts[i]);
       }
       // toString类
       public String toString() {
           return this.sno+" "+this.sname;
       }
}

其他方法(删除、更新学生)类似,我的问题是为甚么我使用add函数后不能永久的保存数据?
一种图片可能表述的更清晰:
只有本站会员才能查看附件,请 登录
1 回复
#2
z444212022-02-13 17:15
因为你的Student.add方法入参的sts数组是基本数据类型。while(true) 循环里面用的永远都是上面你定义的那一个数组。
1