【问题标题】:Java array recordsJava 数组记录
【发布时间】:2015-04-20 20:36:13
【问题描述】:

我需要获得一个具有 3 种值类型的变量类型,我知道的唯一方法是“记录”,但我知道 Java 中没有“记录”这样的类型,但 ArrayList,但是没看懂……

我的结果应该是:(不知道它在 Java 中的样子,所以我以不同的风格显示)

TData = Record
     Username : String;
     UserID : Int ;
     RowID : Int;
   end;
users : array[1..10] of TData;

for(int i = 1; i < rowCount; i++){
   TData.Username[i] = rs.GetString("Name");
   TData.UserID[i] = rs.GetInt("UserID");
   TData.RowID[i] = row;
}

关于如何制作这样的东西有什么建议吗? ArrayList 是我真正需要的吗?

感谢您的帮助,最后我结合并得到了这个结果,效果很好:

class MyData {
        private String userName;
        private int userID;
        private int RowID;


        public MyData(String userName, int userID, int RowID) {
            this.userName = userName;
            this.userID = userID;
            this.RowID = RowID;
        }

        public String getUserName() {
            return userName;
        }

        public int getUserID() {
            return userID;
        }
        public int getRowID() {
            return RowID;
        }
    }

    public void AList(){
        ArrayList<MyData> users = new ArrayList<>();
        try{
            conn = DBConnection.DBConnector();
            pst = conn.prepareStatement("SELECT * FROM TableUserData");
            rs = pst.executeQuery();
            row = 0;
            while (rs.next()) {
                users.add(new MyData(rs.getString("User_name"), rs.getInt("ID"), row));
                row++;
                }
            for (MyData tmp : users) {
                JOptionPane.showMessageDialog(null, "Users: " + tmp.getUserName() + " row: " + rtmp.getRowID());

            }

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Arraylist error: " + e);
        }

    }

【问题讨论】:

  • 您可以创建自己的 Record 类并为其提供这些字段。
  • 在 Java 中使用类而不是记录。 Java 有数组,这与 Pascal 中的相同。 ArrayList是一个List,它使用Array来存储项目,它本身不是数组(但是通常最好使用它,因为你不必设置它的大小,它会自动调整大小)
  • @glglgl OP 说 不知道它在 java 中的样子所以,我以不同的风格展示 你怎么能改变他的 pseudo-代码到你的?当然还有更重要的事情需要编辑。
  • @johnchen902 这个伪代码显然是受 Pascal 启发的,即使它不会,也没有必要访问该类型的字段,所以我改变了它,注意我不要' t改变所有人的意图。如果您发现其他值得更改的地方,请随时更改。

标签: java arrays arraylist data-structures records


【解决方案1】:

你把事情搞混了。

ArrayList 是数组的灵活替代方案,用于存储“一堆”具有相同类型的数据。

这些数据的类型(一个条目)由您决定。

在 Java 中执行此操作的标准方法是定义一个类

class MyData {
    private String userName;
    private int userID;
    private int rowID;

    public MyData(String userName, int userID, int rowID) {
        this.userName = userName;
        this.userID = userID;
        this.rowID = rowID;
    }

    public String getUserName() {
        return userName;
    }

    public int getUserID() {
        return userID;
    }

    public int getRowID() {
        return rowID;
    }
}

然后

ArrayList<MyData> users = new ArrayList<>();

while (rs.next()) {
   users.add(new MyData(rs.GetString("Name"), rs.GetInt("UserID"), rs.GetInt("RowID")));
}

【讨论】:

  • 您忘记将参数添加到构造函数。
  • @johny 谢谢,现在添加它们。
【解决方案2】:

考虑以下代码 sn -p -

int salary;
float bonus;
char YesOrNo = 'Y';  

这里salarybonusYesOrNo都是数据,intfloatchar是数据类型。我们称salaryint 类型数据,bonusfloat 类型数据。这里intfloatchar - 这些数据类型是java 中的原始类型。

除了原始类型之外,您还可以使用 object oriented 编程语言创建自己的数据类型,例如 - java。在这里,我认为您可以创建一个名为 Record 或其他更有意义的名称的类 -

public class Record {
    private String userName;
    private int userId; 
    private int rowId;

    public Record(String userName, int userId, int rowId){
      this.userName = userName;
      this.userId = userId;
      this.rowId
    }

    //getter and setter methods  if required
}  

之后,当您创建 Record 的实例/对象时 -

Record aRecord = new Record("user001", 1, 1);

然后在OOP 中,我们将新创建的类-Record 称为用户定义的数据类型。现在我们可以将aRecord 称为Record 类型的数据。

那么就可以使用ArrayList来存储Record类型的数据了——

List<Record> recordList = new ArrayList<Recored>();

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2012-10-17
    相关资源
    最近更新 更多