我正在构建一个java函数,它接受一个2D数组并返回一个2D数组。此函数过滤输入函数中的一些元素。在这种情况下,它是一个字符串数组,它过滤第二个元素为0的元素。例如: 如果我有阵列
{{"one", "0.0"}, {"two", "2.4"}, {"three", "0.0"}, {"four", "2.3"}}
然后我会得到
{{"two","2.4"},{"four","2.3"}}
我有这个,但它不起作用
public String[][] getArrayNoZero(String[][]s){
String [] result;
for(int i=0; i<s.length; i++){
if(float(s[i][1])>0){
String []tempArray= {s[i][0],s[i][1]};
result.append(tempArray);
}
}
return result;
}
由于
答案 0 :(得分:2)
您尝试输入强制转换的方式无效。使用 Float.parseFloat 方法将字符串转换为float或使用 Equals 方法比较字符串。
public String[][] getArrayNoZero(String[][]s)
{
java.util.List<String[]> result=new java.util.ArrayList<String[]>();
for(int i=0; i<s.length; i++)
{
if(!s[i][1].equals("0.0"))
{
String []tempArray= {s[i][0],s[i][1]};
result.add(tempArray);
}
}
return result.toArray(new String[0][0]);
}
答案 1 :(得分:0)
最简单的方法是构建一个所需返回类型的新ArrayList(此处为new ArrayList<String[]>
),附加所需元素,然后在末尾使用toArray - return myList.toArray(new String[][0]);
。
答案 2 :(得分:0)
首先,一个常量两项的String []是一种存储数据的可怕方法。你最好使用一个对象
public class Pair
{
public String firstElement;
public String secondElement;
}
然后你可以只有一个Pair对象数组。
您目前的实施工作根本行不通。数组不能动态地改变它们的大小(你试图将一个数组附加到另一个数组)。 append()方法返回一个必须在某处分配的NEW数组(你可以看到为什么这么低效)。所以你需要:
result = result.append(tempArray);
更不用说结果必须是一个2D数组,您没有在原始代码中指定。
String[][] result;
现在,当你尝试使用append()时,你将不得不初始化结果以避免NullPointerException。
换句话说,2D数组是存储此数据的一种可怕方式,因为您无论如何只有2列。使用结构和Pair对象的单个数组更加容易,并且可以为您节省很多麻烦。