избавиться от некоторых элементов в 2d массиве в Java - PullRequest
0 голосов
/ 23 февраля 2011

Я строю 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 ]

2 голосов
/ 23 февраля 2011

Способ, которым вы пытались печатать, неверен.Используйте метод Float.parseFloat для преобразования строки в число с плавающей запятой или метод 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]);
 }
0 голосов
/ 23 февраля 2011

Прежде всего, строка [] для константных двух элементов - ужасный способ хранения ваших данных. Вам лучше использовать объект

public class Pair
{
    public String firstElement;
    public String secondElement;
}

И тогда у вас может быть только один массив объектов Pair.

Ваша текущая реализация просто не будет работать. Массивы НЕ МОГУТ динамически изменять свой размер (вы пытаетесь добавить один массив в другой). Метод append () возвращает НОВЫЙ массив, который должен быть где-то назначен (вы можете понять, почему это так неэффективно). Так что вам нужно:

result = result.append(tempArray);

Не говоря уже о том, что результатом должен быть двумерный массив, который вы не указали в исходном коде.

String[][] result;

И теперь вам нужно будет инициализировать результат во что-то, чтобы избежать исключения NullPointerException при попытке использовать append ().

Другими словами, двумерный массив - ужасный способ сохранить эти данные, так как в любом случае у вас есть только 2 столбца. Работать со структурами и одним массивом объектов Pair намного проще и избавит вас от головной боли.

0 голосов
/ 23 февраля 2011

Самый простой способ - создать новый ArrayList с желаемым типом возвращаемого значения (здесь new ArrayList<String[]>), добавить нужные элементы, а затем использовать toArray в конце - return myList.toArray(new String[][0]);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...