在java中删除二维数组中的一些元素
问题描述:
我正在构建一个采用二维数组并返回二维数组的java函数。这个函数过滤输入函数中的一些元素。在这种情况下它的一个字符串数组并筛选出具有其第二元件为0。例如,该元素: 如果我有阵列在java中删除二维数组中的一些元素
{{"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;
}
感谢
答
您试图键入强制转换的方式无效。使用Float.parseFloat方法将字符串转换为浮点数或使用等于方法来比较字符串。
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]);
}
答
最简单的方法为t o创建一个你想要的返回类型的新ArrayList(在这里,new ArrayList<String[]>
),附加所需的元素,然后在末尾使用toArray - return myList.toArray(new String[][0]);
。
答
首先,一个字符串[]为一个常量两项是一种可怕的方式来存储您的数据。你最好用对象
public class Pair
{
public String firstElement;
public String secondElement;
}
然后你可以只有一个Pair对象的数组。
您目前的实施根本无法工作。数组不能动态改变它们的大小(你试图将一个数组附加到另一个数组)。 append()方法返回一个NEW数组,它必须被分配到某处(你可以看到为什么这么低效)。所以,你需要:
result = result.append(tempArray);
且不说结果必须是一个二维数组,首先,你没有在原来的代码中指定。
String[][] result;
现在你将不得不初始化结果的东西,以避免一个NullPointerException当您尝试使用的append()。
换句话说,二维数组是一种可怕的方式来存储这些数据,因为您无论如何只有2列。使用结构和Pair对象的单个数组更容易,并且会为您节省很多头痛。