Java и операции над массивом - PullRequest
0 голосов
/ 10 декабря 2011

У меня проблема с массивами в Java. У меня есть массив:

double[][] tab2 = {{318, 0.0825},
                  {321, 0.1131},
                  {309, 0.0283},
                  {319, 0.0830}};

и мне нужно изменить этот массив на:

double[][] tab2 = {{318, 0.0830},
                  {321, 0.0283},
                  {309, 0.1131},
                  {319, 0.0825}};

Это то, что я имею в виду. У меня есть четыре номера. В этом примере 318, 321, 309 и 319. Каждый номер связан с другим номером, например, 318 - 0,0825, 321 - 0,1131 и т. Д. Мне нужно изменить значение второго значения. Когда номер, который связан с наибольшим номером, должен быть связан с меньшим, например. 321 - 0,1131 должно быть 321 - 0,0283, 318 - 0,00830 должно быть 318 - 0,0825. Можно ли это делать?

Ответы [ 4 ]

4 голосов
/ 10 декабря 2011

Было бы легче сделать это, если бы массивы были расположены в транспонированной форме.

double[][] tab3 = {
    {318.0, 321.0, 309.0, 319.0},
    {0.0830, 0.1131, 0.0283, 0.0830}}

Затем можно отсортировать первый массив (tab3[0]) в порядке возрастания, а затем второй массив (tab3[1]) в порядке убывания. Тогда все индексы массива выстроятся в ряд и совпадут с самым большим и самым маленьким. double[0][0] будет самым большим, а double[1][0] будет самым маленьким, соответствуя 309 и 0,1131 вместе.

double[][] tab3 = {
    {309.0, 318.0, 319.0, 321.0},
    {0.1131, 0.0830, 0.0830, 0.0283}}
1 голос
/ 10 декабря 2011

Вы можете использовать Map, в этом случае укажите первое число в качестве ключа и второе число в качестве значения. См. Ниже документ для получения более подробной информации о карте.

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

0 голосов
/ 10 декабря 2011

Вы можете достичь этого:

HashMap<Integer,Double> mapValues = new HashMap<Integer,Double>();
// Insert keys and values into mapValues
Integer[] keys  = mapValues.KeySet().toArray(new Integer[]{});
Double[] values = mapValues.Values().toArray(new Double[]{});
Arrays.sort(keys,Collections.reverseOrder());
Arrays.sort(values);
HashMap<Integer,Double> resultMap = new HashMap<Integer,Double>();
for(int i=0; i<keys.length; i++){
   resultMap.put(keys[i], values[i]);
}
0 голосов
/ 10 декабря 2011

Возможно, это будет не самое эффективное решение, но оно будет работать

double[][] tab2 = {{318, 0.0825},
              {321, 0.1131},
              {309, 0.0283},
              {319, 0.0830}};
List<Double> firstEntries = new ArrayList<Double>(  );
List<Double> secondEntries = new ArrayList<Double>(  );
for ( double[] doubles : tab2 ) {
  firstEntries.add( doubles[ 0 ] );
  secondEntries.add( doubles[ 1 ] );
}
Collections.sort( firstEntries );
Collections.sort( secondEntries );
Collections.reverse( secondEntries );
//now the lists contain the entries in the correct order
//if needed, they can be grouped again in an array
for ( int i = 0; i < tab2.length; i++ ) {
  double[] doubles = tab2[ i ];
  doubles[1] = secondEntries.get( firstEntries.indexOf( doubles[0] ) );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...