gpt4 book ai didi

java - 尝试显示 ArrayList 的内容。获取 [Ljava.lang.String;@232204a1

转载 作者:行者123 更新时间:2023-12-01 22:05:18 25 4
gpt4 key购买 nike

我正在尝试输出 ArrayList 的内容,但无论我尝试哪种方法,我似乎得到的是数组的位置而不是数组的内容。一起运行以下每一项会给我带来:

 run:
[[Ljava.lang.String;@55f96302, [Ljava.lang.String;@232204a1, [Ljava.lang.String;@4554617c, [Ljava.lang.String;@7f31245a, [Ljava.lang.String;@2503dbd3, [Ljava.lang.String;@5cad8086]


[Ljava.lang.String;@232204a1
[Ljava.lang.String;@232204a1
[Ljava.lang.String;@232204a1

这是代码片段:

// Each of the following approaches results in 
// [Ljava.lang.String;@232204a1
// instead of the actual value of the ArrayList.

String test = accountNumbers.get(1);
System.out.println(test);

System.out.println(accountNumbers.get(1));

System.out.println(accountNumbers.get(1).toString());

// This actually outputs:
// [[Ljava.lang.String;@55f96302, [Ljava.lang.String;@232204a1, [Ljava.lang.String;@4554617c, [Ljava.lang.String;@7f31245a, [Ljava.lang.String;@2503dbd3, [Ljava.lang.String;@5cad8086]
String str = Arrays.toString(accountNumbers.toArray());
System.out.println(str);

我不太确定是什么原因造成的。有什么办法可以让内容显示出来吗?

编辑:这是整个方法。另一个问题( here )的答案建议我尝试使用 ArrayList 而不是我正在使用的方法。我采纳了该建议,但我觉得这些问题最好放在一个新问题中,而不是对该问题进行编辑。

protected static void loadAccountInformationFromFile() throws Exception 
{

Scanner account = new Scanner(new File(INPUT_ACCOUNT_FILE)).useDelimiter(",");

int sortCount = 1;

List<String> accountNumbers = new ArrayList<>();
List<String> firstNames = new ArrayList<>();
List<String> lastNames = new ArrayList<>();
List<String> balances = new ArrayList<>();
List<String> lastVariables = new ArrayList<>();


do {

String[] temp1 = account.next().split(",");
String temp2 = "" + temp1;

if (sortCount == ACCOUNT_NUMBER_COUNT) {
accountNumbers.add(temp2);
} else if (sortCount == FIRST_NAME_COUNT) {
firstNames.add(temp2);
} else if (sortCount == LAST_NAME_COUNT) {
lastNames.add(temp2);
} else if (sortCount == BALANCE_COUNT) {
balances.add(temp2);
} else if (sortCount == LAST_VARIABLE_COUNT) {
lastVariables.add(temp2);
}

if (sortCount < MAX_VALUES_PER_LINE) {
sortCount++;
} else {
sortCount = 1;
}
} while (account.hasNext());


// Each of the following approaches results in
// [Ljava.lang.String;@232204a1
// instead of the actual value of the ArrayList.

String test = accountNumbers.get(1);
System.out.println(test);

System.out.println(accountNumbers.get(1));

System.out.println(accountNumbers.get(1).toString());

// This actually outputs:
// [[Ljava.lang.String;@55f96302, [Ljava.lang.String;@232204a1, [Ljava.lang.String;@4554617c, [Ljava.lang.String;@7f31245a, [Ljava.lang.String;@2503dbd3, [Ljava.lang.String;@5cad8086]
String str = Arrays.toString(accountNumbers.toArray());
System.out.println(str);

account.close();

// I want to adapt what I previously used to access the ArrayLists.

// Bank bank = new Bank();
//
// bank.openAccount(new CheckingAccount(10100, new Customer("Adam", "Apple"),500.00,false));
// bank.openAccount(new CheckingAccount(10101, new Customer("Beatrice", "Bagel"),2000.00,true));
// bank.openAccount(new SavingsAccount(2010, new Customer("Adam", "Apple"),5000.00,0.02));
}

编辑2:以下是类变量:

private final static String INPUT_ACCOUNT_FILE = "accountInfo.txt";
private static final int ACCOUNT_NUMBER_COUNT = 0;
private static final int FIRST_NAME_COUNT = 1;
private static final int LAST_NAME_COUNT = 2;
private static final int BALANCE_COUNT = 3;
private static final int LAST_VARIABLE_COUNT = 4;
private final static int MAX_VALUES_PER_LINE = 5;

编辑3:为了那些可能会晚读这个问题并被正确答案的一些评论所困惑的人的利益,我的问题的一部分与文本文件的问题有关本身。这是文本文件格式的示例:

 10100,First,Last,Balance,value
10101,First,Last,Balance,value
20100,First,Last,Balance,value

另外:为了让 ArrayLists 存储正确的字符串,我必须更改 sortCount:

int sortCount = 1;

int sortCount = 0;

因为当它设置为 1 时,它会将名字存储在帐号字符串中。

最佳答案

问题不在于您的“显示”,而在于您从文件中读取内容的方式。

您的代码正确打印出“地址”,因为 accountNumbers 实例中的字符串实际上是这些值(因为您将字符串数组放入一个字符串中)。所以真正发生的是在你的 temp2 字符串中是你的 temp1.toString()。

您使用了错误的分隔符(您应该使用默认的空格分隔符):

Scanner account = new Scanner(new File(INPUT_ACCOUNT_FILE));

然后分配如下值:

if (temp1.length > ACCOUNT_NUMBER_COUNT) {
accountNumbers.add(temp1[ACCOUNT_NUMBER_COUNT]);
if (temp1.length > FIRST_NAME_COUNT) {
firstNames.add(temp1[FIRST_NAME_COUNT]);
if (temp1.length > LAST_NAME_COUNT) {
lastNames.add(temp1[LAST_NAME_COUNT]);
if (temp1.length > BALANCE_COUNT) {
balances.add(temp1[BALANCE_COUNT]);
if (temp1.length > LAST_VARIABLE_COUNT) {
lastVariables.add(temp1[LAST_VARIABLE_COUNT]);
}

不需要您的 temp2 和 sort 变量。

无论如何,使用这些集合有点奇怪。我宁愿建议这样做:

Scanner scanner = new Scanner(new File(INPUT_ACCOUNT_FILE));
Collection<Account> bank = new ArrayList<>();

while (scanner.hasNext()) {
String[] fields = scanner.next().split(",");
if (fields.length < MAX_VALUES_PER_LINE) {
continue; // incomplete row, skip it or maybe throw some exception?
}

String number = fields[ACCOUNT_NUMBER_COUNT];
Customer customer = new Customer(fields[FIRST_NAME_COUNT], fields[LAST_NAME_COUNT]);
double balance = Double.valueOf(fields[BALANCE_COUNT]);
String type = fields[LAST_VARIABLE_COUNT];

Account a = null;
switch (type) {
case "N": {
a = new CheckingAccount(number, customer, balance);
break;
}
case "0.02": {
a = new SavingsAccount(number, customer, balance);
break;
}
default: {
continue; // unknown type of account, skip it or maybe throw some exception?
}
}
bank.add(a);
}

关于java - 尝试显示 ArrayList 的内容。获取 [Ljava.lang.String;@232204a1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32900426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com