在java中摆脱2d数组中的一些元素

时间:2011-02-23 01:08:43

标签: java multidimensional-array

我正在构建一个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;
}

由于

3 个答案:

答案 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对象的单个数组更加容易,并且可以为您节省很多麻烦。