首页 > 解决方案 > 为什么它在java中返回整个数组

问题描述

嗨,我正在编写一个程序,我想返回其中不包含 null 或 0 的数组的一部分。所以数组最初是int,我将它转换为字符串并使用它

public String toString(){
    // TODO: Return the String with the format of [1,2,3,4] as an example. Have stack items seperated by commas, enclosed inside brackets, and no comma at the end!

    if(top ==0 || a== null )
        return "[ ]";
    String [] d = new String [n];
    for(int r=0; r<n ; r++) {
        //if (r<0 && a[r] != 0)
        d[r] = Integer.toString(a[r]);
    }
    return "[" + String.join("," , d) + "]";


    // This can be removed but is here to prevent the Java error while testing!
}

返回我想要的结果,但不是返回我需要的值,而是返回数组中的所有值,无论我使用什么 if 语句。所以 n = 256。有人可以帮助我吗,我的硬件很快就要到期了,这是我一整天都在烦恼的最后一部分。

标签: javaarraysintegerstacktostring

解决方案


考虑代码:

for(int r=0; r<n ; r++) {
    if (<anything>)
        d[r] = Integer.toString(a[r]);
}

在此代码r中,无论 是否<anything>为真,每次迭代都会递增。因此,当条件成立并跳过其他值时,您将填充值。这可能不是你想要的。

你有几个选择。最简单的是使用 aList而不是数组:

List<String> result = new ArrayList<>();
for(int r=0; r<n ; r++) {
    if (<anything>)
        result.add(Integer.toString(a[r]);
}

如果必须使用数组,则需要单独存储项目数,以便知道有多少满足条件的项目:

int itemCount = 0;
for(int r=0; r<n ; r++) {
    if (<anything>)
        d[itemCount++] = Integer.toString(a[r]);
}

然后,您可以在打印语句中使用项目计数或调整数组大小:

d = Arrays.copyOf(d, itemCount);

比所有这些更容易的是使用 aStream在一个语句中完成所有操作:

String result = Arrays.stream(a)
    .filter(<anything>).mapToObj(Integer::toString)
    .collect(Collectors.joining(",", "[", "]");

推荐阅读