微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对象 Arraylist 元素正在更改 - Java

如何解决对象 Arraylist 元素正在更改 - Java

刚开始学习java和OOP。我尝试创建一个对象“person”的数组列表,用于存储他们的姓名、年龄和工作以便于访问。出于某种原因,在我将对象添加到数组列表中的其他索引后,同一索引处的对象会发生变化。为什么会出现这个问题,我该如何解决

problem in output

这是我的 person 对象、person_array 和我的 IO_Driver 的代码

// OBJECT PERSON
package DEMOPK;
public class person {
  public String name;
  public int age;
  public String job;

  public person(String name,int age,String job) {
    this.name = name;
    this.age = age;
    this.job = job;
  }
}

// person_array
package DEMOPK;

import java.util.ArrayList;

public class person_array {
  public static int len;
  static ArrayList<person> data = new ArrayList<person>();
  //PROBLEM HERE
  public person_array(int a) {  
    len = a;
    data.ensureCapacity(len);
    person p = new person("empty","empty");    
    for (int i = 0; i < len; i++) {
      data.add(p);
    }
  }

  public int get_len() {
    return len;
  }
  
  public static int hash(String name) {
    int ascii_sum = 0;
    for (int i = 0; i < name.length(); i++) {
      ascii_sum += name.charat(i);
      //System.out.println(name.charat(i));
    }
    //System.out.println(len);
    int index = ascii_sum % len;
    System.out.println("Hash index: "+ index);
    
    return index;
  }

  public void add_person(String name,String job) {
    person p = new person(name,age,job);
    int index = hash(name);
    data.add(index,p);
  }

  public person get_person(String name) {
    return data.get(hash(name));
  }

}

// I/O Driver
import java.util.Scanner;
import DEMOPK.person_array;
import DEMOPK.person;

public class test_person {
  public static void main(String[] args) {
    System.out.println("What size do you want your database of people to be?");
    Scanner scanner = new Scanner(system.in);
    int arr_len = scanner.nextInt();
    person_array data = new person_array(arr_len * 10);
    System.out.println(data.get_len());

    System.out.println("type help for a list of commands\n");

    while (true) {
      System.out.println("What is your next command?\n");
      String command = scanner.next();
      if (command.compareto("help") == 0) {
        System.out.println("help - displays a list of commands\n");
        System.out.println("add - adds a person to the collection\n");
        System.out.println("person - shows information of that person\n");
        System.out.println("quit - quits the program\n");
      } else if (command.compareto("add") == 0) {
        System.out.println("Name: ");
        String name = scanner.next();

        System.out.println("Age: ");
        int age = scanner.nextInt();

        System.out.println("Job: ");
        String job = scanner.next();

        data.add_person(name,job);
        System.out.println(name + " has been successfully added to the collection\n");
      } else if (command.compareto("person") == 0) {
        System.out.println("What is the name of the person you want info about? ");
        String name = scanner.next();
        System.out.println("\n");
        person p = data.get_person(name);
        System.out.println("Name: " + p.name);
        System.out.println("Age: " + p.age);
        System.out.println("Job: "+ p.job);
      } else if (command.compareto("quit") == 0) {
        System.out.println("quitting program...");
        break;
      } else {
        System.out.println("Invalid command please type help for a list of commands\n");
        System.out.println("================================\n");
        continue;
      }
      System.out.println("================================\n");
    }
    scanner.close();

  }
  
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。