Я пытаюсь инвертировать международный массив в 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;
}
Что не так с ним?
Чтобы изменить массив 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;
}
, как вы это делаете, вы дважды поменяете каждый элемент, поэтому результат так же, как исходный список.
public class ArrayHandle {
public static Object[] reverse(Object[] arr) {
List<Object> list = Arrays.asList(arr);
Collections.reverse(list);
return list.toArray();
}
}
//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
-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)
Большую часть времени, это быстро
Наиболее эффективно просто выполнить итерацию массива в обратном направлении.
Я не уверен, что решение Аарона делает это vi этот вызов Collections.reverse(list);
Кто-нибудь знает?
Ваша программа будет работать только на длине = 0, 1
.
Вы можете попробовать :
int i = 0, j = validData.length-1 ;
while(i < j)
{
swap(validData, i++, j--); // code for swap not shown, but easy enough
}
Я думаю, что будет немного проще следовать логике алгоритма, если вы объявите явные переменные для отслеживания индексов, которые вы меняете местами на каждой итерации цикла.
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--;
}
}