当前位置: 首页 > 知识库问答 >
问题:

数组列表仅打印最后添加的元素

洪逸清
2023-03-14

我有一个函数,可以为传入的用户数组(使用 RSA 算法)生成密钥对,它似乎为每个用户正确生成密钥并将它们添加到数组列表中。但是,当我尝试打印输出时,它似乎只打印最后一个元素。似乎无法弄清楚我做错了什么。

下面是生成密钥并返回数组列表的函数:-它将用户的字符串数组作为参数。

public static  ArrayList<User> generateUserKeys(String [] users){

    ArrayList <User> usrs = new ArrayList<User>();

    KeyPair k;

    for ( int i=0;i<users.length;i++)
    {

        k=generateKeyPair();

        usrs.add(new User(users[i],k.getPublic(),k.getPrivate()));
        System.out.println("User Name is :"+ usrs.get(i).getUserName());
        System.out.println("Public Key is :"+ usrs.get(i).getPublicKey());
        System.out.println("Private Key is :" + usrs.get(i).getPrivateKey());



    }   


    return usrs;

}

这是我如何测试它:-

String [] users =  
{"alisy@tcd.ie","yimk@tcd.ie","bachas@tcd.ie","tannerh@tcd.ie"};

 ArrayList<User> usrz= generateUserKeys(users);
 Iterator<User> itr = usrz.iterator();

 while(itr.hasNext())
{
    System.out.println(itr.next().getUserName());

}

我收到的输出是

tannerh@tcd.ie
tannerh@tcd.ie
tannerh@tcd.ie
tannerh@tcd.ie

共有2个答案

周麒
2023-03-14

我试着按原样运行它,很明显,对于用户或KeyPairGenerator使用了什么代码,我做了一些假设。这是我的代码,我没有得到问题中描述的那种输出。你能帮我看看这是静电还是其他什么原因吗?@PaulBoddington -请不要把这当成对你已经说过的话的评判。我在我做的一个测试的基础上张贴这个。警告:在这里我可能是错的。

源代码:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Iterator;

class User {
    private String userName;
    private PublicKey pubKey;
    private PrivateKey privKey;

    public User(String string, PublicKey public1, PrivateKey private1) {
        userName = string;
        pubKey = public1;
        privKey = private1;
    }

    public String getUserName() {
        return userName;
    }

    public String getPublicKey() {
        return pubKey.toString();
    }

    public String getPrivateKey() {
        return privKey.toString();
    }
}

public class RSAKeyGenExample {

    public static ArrayList<User> generateUserKeys(String[] users) throws NoSuchAlgorithmException {
        ArrayList<User> usrs = new ArrayList<User>();

        KeyPair k;
        KeyPairGenerator keyGen = null;
        keyGen = KeyPairGenerator.getInstance("RSA");

        for (int i = 0; i < users.length; i++) {
            k = keyGen.generateKeyPair();

            usrs.add(new User(users[i], k.getPublic(), k.getPrivate()));
            System.out.println("User Name is :" + usrs.get(i).getUserName());
            System.out.println("Public Key is :" + usrs.get(i).getPublicKey());
            System.out.println("Private Key is :" + usrs.get(i).getPrivateKey());
        }
        return usrs;
    }

    public static void main(String[] args) throws NoSuchAlgorithmException {
        String[] users = { "alisy@tcd.ie", "yimk@tcd.ie", "bachas@tcd.ie", "tannerh@tcd.ie" };

        ArrayList<User> usrz = generateUserKeys(users);

        Iterator<User> itr = usrz.iterator();
        while (itr.hasNext()) {
            System.out.println(itr.next().getUserName());
        }
    }
}
陈飞
2023-03-14

我在你的generateUserKeys方法代码中没有看到任何问题。大概是用户类不ok,有没有在用户类内部设置用户名值为“tannerh@tcd.ie”?

其他System.out.println(…)行的结果是什么?它也应该打印“用户名是:tannerh@tcd.ie”四次。

 类似资料:
  • 问题内容: 下面有一个for循环代码。我通过调用一个自定义显示函数发现aBook arrayList对象仅添加了最后一个类对象三次。为什么会这样呢? 这是我的LiFiAddressBook类 } 问题答案: 由于使用static关键字,每次 调用构造函数时,旧值都会被新值覆盖,并且在打印列表中的元素时,LiFiAddressBook类的对象变量将指向相同的对象。因此打印相似的对象。 需要明确的是,

  • 这是我的代码片段 在这个数组代码中,我必须打印非重复的整数值 说数组值是:-[1,1,2,3,1,2,4,5]答案应该是:-[3,4,5]即我必须打印的非重复整数值。有人能帮我解决这个问题吗

  • 在有趣的功能中,当我将列表添加到其他列表时,它正在添加空列表,我可以找到原因有人可以帮助我这个程序是关于查找给定数组的不同组合

  • 问题内容: 我有一个pojo,尝试将csv文件中的数据读取到列表中,然后将其打印出来。从文件读取工作正常,在读取/添加的瞬间,我可以看到正确的ID,但是一旦尝试将其全部打印回来,我只会得到列表的最后一个元素。以下是我正在尝试的: 我从上面得到的输出是: 团队编号为:1 团队编号为:2 团队编号为:3 团队编号为:4 球队信息:4 球队信息:4 球队信息:4 球队信息:4 我想念什么..?为什么前三

  • 对于上述代码,我得到的输出为: 但我的期望是得到。 你能指导我实现这一点吗?

  • 我有几个问题。我正在做家庭作业,但遇到了一些令人困惑的事情。(我上的是入门课,有错误,很抱歉。) 实现一个以整数数组和int x作为其大小的类。在类中创建一个方法,该方法创建一个长度比数据长度大1的新数组。然后创建一个方法,将所有数据元素复制到新数组中,并将x值添加到数组的最后一个元素中。创建一个方法来返回新数组中的所有整数。 这是我的 这只是返回NULL。 我的问题是上面任务的最后一点。“创建一