Сохранить результат цикла в массив JAVA
Доброе утро дорогие коллеги. Объясните пожалуйста как записать результат цикла в новый массив:
String text = "absdsbad";
char[] array = text.toCharArray();
char[] arrayToChar = new char[array.length];
for (int i = array.length - 1; i >= 0; i--) {
System.out.print(array[i]);
}
System.out.println();
System.out.println(arrayToChar);
хочу записать этот результат в массив arrayToChar тут как бы идет реверс. знаю что могу воспользоваться StringBuilder и сделать реверс но нужно именно из цикла записать результат. Спасибо за помощь!
Благодарю всех за отлик и за помощь! Идея изначально была такая что бы сравнить два массива на правду.
public static void main(String[] args) {
String text = "abccba";
char[] array1 = text.toCharArray();
char[] array2 = new char[array1.length];
boolean result = false;
for (int i = array1.length - 1; i >= 0; i--) {
array2[array1.length - i - 1] = array1[i];
result = Arrays.equals(array1,array2);
}
System.out.println(result);
}
сейчас у меня вот так проверяет результат. Но мне нужно что бы результат проверялся без метода equals и сделать проверку в этом же цикле (если это возможно) =) Всем еще раз спасибо за помощь!
Ответы (2 шт):
String text = "absdsbad";
char[] array = text.toCharArray();
char[] arrayToChar = new char[text.length()];
for (int i = array.length - 1; i >= 0; i--) {
arrayToChar[array.length - i -1] = array[i];
}
System.out.println(arrayToChar);
Для решения данной задачи нет особой необходимости дополнительно создавать новый массив символов, так как по умолчанию метод String::toCharArray копирует содержимое строки в новый массив:
public char[] toCharArray()
Converts this string to a new character array.
Returns:
a newly allocated character array whose length is the length of this string and whose contents are initialized to contain the character sequence represented by this string.
Соответственно, для инвертирования строки можно будет использовать массив array, причём это можно сделать эффективно за n/2 итераций, обменивая поочерёдно первый элемент с последним, второй с предпоследним и так далее до середины массива. Обмен значений между двумя элементами массива можно выполнять как с помощью вспомогательного символа, так и без него.
Дополнение:
Также можно сразу реализовать проверку, является ли входная строка полным палиндромом, поочерёдно проверяя пары символов и применяя логическое AND:
String text = "absdsbad";
char[] array = text.toCharArray();
boolean isPalindrome = true; // предполагаем что палиндром существует
// обмен попроще, один индекс и вспомогательная переменная
for (int i = 0, n = array.length; i < n / 2; i++) {
char c = array[i];
isPalindrome &= c == array[n - i - 1]; // сравниваем два символа
array[i] = array[n - i - 1];
array[n - i - 1] = c;
}
System.out.println(array); // -> dabsdsba
System.out.println("palindrome? " + isPalindrome); // -> palindrome? false
isPalindrome = true;
// обмен с двумя индексами
for (int i = 0, j = array.length; i < --j;) {
isPalindrome &= array[i] == array[j];
array[i] = (char)(array[i] ^ array[j] ^ (array[j] = array[i++]));
}
System.out.println(array); // -> absdsbad
System.out.println("palindrome? " + isPalindrome); // -> palindrome? false
Для входной строки String text = "abccba"; результат будет такой:
abccba
palindrome? true
abccba
palindrome? true