Как я инвертирую международный массив в Java?

Я пытаюсь инвертировать международный массив в Java.

Этот метод не инвертирует массив.

for(int i = 0; i < validData.length; i++)
{
    int temp = validData[i];
    validData[i] = validData[validData.length - i - 1];
    validData[validData.length - i - 1] = temp;
}

Что не так с ним?

223
задан Patrick Parker 8 May 2018 в 11:45
поделиться

6 ответов

Чтобы изменить массив INT, вы подкрашаете элементы вверх, пока вы не достигнете средней точки, как это:

for(int i = 0; i < validData.length / 2; i++)
{
    int temp = validData[i];
    validData[i] = validData[validData.length - i - 1];
    validData[validData.length - i - 1] = temp;
}

, как вы это делаете, вы дважды поменяете каждый элемент, поэтому результат так же, как исходный список.

271
ответ дан 23 November 2019 в 03:58
поделиться
public class ArrayHandle {
    public static Object[] reverse(Object[] arr) {
        List<Object> list = Arrays.asList(arr);
        Collections.reverse(list);
        return list.toArray();
    }
}
50
ответ дан 23 November 2019 в 03:58
поделиться
//Here is the variable with which you assign a new value to the attribute
    string newValue = string.Empty 
    XmlDocument xmlDoc = new XmlDocument();

    xmlDoc.Load(xmlFile);

    XmlNode node = xmlDoc.SelectSingleNode("Root/Node/Element");
    node.Attributes[0].Value = newValue;

    xmlDoc.Save(xmlFile);

Кредит переходит на Padrino

Как изменить атрибут XML

-121--3176667-

вот один из способов

while(1){
    print "Enter in a month: ";
    $pattern = <STDIN>;
    chomp($pattern);
    if ($pattern =~ /^(Q|q)$/ ){last;}
    if ($pattern =~ /^[0-9]$/ || $pattern =~ /^[0-9][12]$/ ) {
        print "Pattern matches\n";
    }else{
        print "try again\n";
    }
}

вывода

$ perl perl.pl
Enter in a month: 01
Pattern matches
Enter in a month: 000
try again
Enter in a month: 12
Pattern matches
Enter in a month: 00
try again
Enter in a month: 02
Pattern matches
Enter in a month: 13
try again
Enter in a month:
-121--2363427-

С помощью Commons.Lang можно просто использовать

ArrayUtils.reverse(int[] array)

Большую часть времени, это быстро

293
ответ дан 23 November 2019 в 03:58
поделиться

Наиболее эффективно просто выполнить итерацию массива в обратном направлении.

Я не уверен, что решение Аарона делает это vi этот вызов Collections.reverse(list); Кто-нибудь знает?

2
ответ дан 23 November 2019 в 03:58
поделиться

Ваша программа будет работать только на длине = 0, 1. Вы можете попробовать :

int i = 0, j = validData.length-1 ; 
while(i < j)
{
     swap(validData, i++, j--);  // code for swap not shown, but easy enough
}
3
ответ дан 23 November 2019 в 03:58
поделиться

Я думаю, что будет немного проще следовать логике алгоритма, если вы объявите явные переменные для отслеживания индексов, которые вы меняете местами на каждой итерации цикла.

public static void reverse(int[] data) {
    for (int left = 0, right = data.length - 1; left < right; left++, right--) {
        // swap the values at the left and right indices
        int temp = data[left];
        data[left]  = data[right];
        data[right] = temp;
    }
}

Я также думаю, что это будет более читабельно, если сделать это в цикле while.

public static void reverse(int[] data) {
    int left = 0;
    int right = data.length - 1;

    while( left < right ) {
        // swap the values at the left and right indices
        int temp = data[left];
        data[left] = data[right];
        data[right] = temp;

        // move the left and right index pointers in toward the center
        left++;
        right--;
    }
}
39
ответ дан 23 November 2019 в 03:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: