java поменять местами последнюю и 1-ю строки - проблема работает для 3, но не для 4 - PullRequest
2 голосов
/ 12 июля 2020

Приведенный ниже код работает, когда число строк в массиве нечетное (3,5,7), однако он не работает, когда число четное. Например, если я использую «my is the name», я получаю результат

name is the name

public void randomTest() {
       String str ="my is name";
       //Step1: split so that I can get them in in array
       String [] arrStr= str.split(" ");
       for(int i=0;i<arrStr.length;i++){
           //Step2: Using temp swap 1st and last 
           String temp = arrStr[0];
           arrStr[0] = arrStr[arrStr.length-1];
           arrStr[arrStr.length-1] = temp;

           System.out.print(arrStr[i]+" ");
       }
    }

Есть идеи, как я могу заставить его работать с четным количеством строк? Спасибо.

Ответы [ 4 ]

1 голос
/ 12 июля 2020

Поскольку Arvind Kumar Avina sh поделился фиксированным решением, я просто хотел бы предложить альтернативный вариант: после разделения строки на массив String, возможно, вы можете просто поменять местами последнее и первое значения, а затем соедините их вместе:

String str ="my is the name";

// split
String[] arrStr= str.split(" ");

// swap
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length - 1];
arrStr[arrStr.length - 1] = temp;

// join them back
str = String.join(" ", arrStr);

System.out.println(str); // name is the my
0 голосов
/ 12 июля 2020

Самый простой способ - подставить первое и последнее слово из предложения.

    int first = name.indexOf(' ');                             // first "space" character that occurs
    int last = name.lastIndexOf(' ');                          // last "space" character that occurs

    String firstWord = name.substring(0, first);               // substring first word from index 0  to index of first "space" character
    String lastWord = name.substring(last, name.length()-1);   // substring last word from index the of last "space" character to higher index o sentence
    String midSentece = name.substring(first, last);           // substring rest of the sentence

    System.out.println(lastWord + midSentece + firstWord);
   
0 голосов
/ 12 июля 2020

В настоящее время вы меняете местами первый и последний элементы n раз, где n - размер массива. Это делает так, что когда у вас есть четное количество элементов, например 2, вы меняете местами первый и последний элементы, а затем меняете их местами обратно в исходное положение, которое не заменяется. Вот почему он работает для нечетного количества элементов, поскольку вы меняете местами первый и последний элементы четное количество раз, а затем еще раз. Если вы просто хотите поменять местами первый и последний элементы, вы можете просто избавиться от for l oop, который у вас есть, и он будет работать правильно.

    public void randomTest() {
       String str ="my is name";
       //Step1: split so that I can get them in in array
       String [] arrStr= str.split(" ");
       
       //Step2: Using temp swap 1st and last 
       String temp = arrStr[0];
       arrStr[0] = arrStr[arrStr.length-1];
       arrStr[arrStr.length-1] = temp;
    }

После этого, если вы захотите объедините строки вместе, вы можете использовать

str = String.join(" ", arrStr);

или объект StringBuilder, подобный этому.

StringBuilder sb = new StringBuilder(arrStr[0]);
for (int i = 0; i < arrStr.length; i++) {
    sb.append(" ").append(arrStr[i]);
}
str = sb.toString();

Эффект любого из них превратит my name is foo в foo name is my, в основном меняя местами первое и последнее слово, и будет работать для строки с любой длиной или количеством слов.

0 голосов
/ 12 июля 2020

Вам нужно выполнить итерацию l oop только для половины длины массива, т.е.

for (int i = 0; i < arrStr.length / 2; i++)

Кроме того, вам необходимо использовать переменную счетчика i вместо фиксированных значений 0 и 1. Убедитесь, что индексы ограничены диапазоном 0 to length_of_array - 1, который является диапазоном индексов массива в Java.

Сделайте это следующим образом:

public class Main {
    public static void main(String[] args) {
        String str = "my is the name";
        String[] arrStr = str.split(" ");

        // Swap the elements of the array
        for (int i = 0; i < arrStr.length / 2; i++) {
            String temp = arrStr[i];
            arrStr[i] = arrStr[arrStr.length - i - 1];
            arrStr[arrStr.length - i - 1] = temp;
        }

        // Display the array
        for (int i = 0; i < arrStr.length; i++) {
            System.out.print(arrStr[i] + " ");
        }
    }
}

Вывод:

name the is my 

Если вы хотите поменять местами только первое слово на последнее слово, вам не нужно al oop. Вы можете просто так:

public class Main {
    public static void main(String[] args) {
        String str = "my is the name";
        String[] arrStr = str.split(" ");

        // Swap the first and the last words
        String temp = arrStr[0];
        arrStr[0] = arrStr[arrStr.length - 1];
        arrStr[arrStr.length - 1] = temp;

        // Display the array
        for (int i = 0; i < arrStr.length; i++) {
            System.out.print(arrStr[i] + " ");
        }
    }
}

Вывод:

name is the my 
...