java - 为什么它在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。有人可以帮助我吗,我的硬件很快就要到期了,这是我一整天都在烦恼的最后一部分。
解决方案
考虑代码:
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(",", "[", "]");
推荐阅读
- jquery - 使用 jQuery 删除前置脚本标签?
- php - 为什么 \DomDocument#schemaValidate() 对有效 XML 发出警告?
- html - 我似乎无法让我的 html 按钮标签工作?
- javascript - 表 'add'、'editable' 之前和之后 'append'
- android - ScrollView 使内部 GridLayout 消失
- apache-nifi - 调试复杂 NiFi 数据流的理想方法
- spring - 在 Spring Boot 中禁用 /cloudfoundryapplication
- powershell - Powershell 复制文件,将源路径、搜索字符串和目标路径作为参数传递
- go - 是否可以将 Go 程序编译为 LLVM IR?
- ios - 是否必须转换为 Swift 4?即使不是强制性的,我也应该转换吗?