![](/img/trans.png)
[英]Java: Retrieving information of an ArrayList with unique ID only prints out info of last element added to it
[英]Arraylist only prints last added element
我有一個函數,用於為傳入的用戶數組生成密鑰對(使用RSA算法),它似乎可以為每個用戶正確生成密鑰並將它們添加到數組列表中。 但是,當我嘗試打印輸出時,它似乎只打印最后一個元素。 似乎無法弄清楚我在做什么錯。
這是生成密鑰並返回arraylist的函數:-它使用用戶的字符串數組作為參數。
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
我在您的generateUserKeys方法代碼中沒有看到任何問題。 可能是User類不好,您是否在User類中將用戶名值設置為“ tannerh@tcd.ie”?
其他System.out.println(...)行的結果是什么? 它也應該打印四次“用戶名是:tannerh@tcd.ie”。
我嘗試按原樣運行它,顯然,對於用戶或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());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.