Массив строк не выводится в обратном порядке - PullRequest
0 голосов
/ 26 октября 2019

У меня есть вопрос, который звучит так:

Создайте Java-программу под названием Lab2Part4, которая содержит метод с именем outputInReverse. Метод должен ввести ТРИ строки и затем вывести три строки в обратном порядке с пробелом между ними, например, outputInReverse(“The”, “Black” ,“Cat”) выведет “Cat Black The” как одну строку.

Я думал о создании вложенного цикла for, гдеисходный массив переопределяет новый массив в обратном порядке, а затем печатает новый массив, но кажется, что он где-то портится

Ответы [ 3 ]

1 голос
/ 26 октября 2019

Вложенный цикл не работает так, как вы его использовали в этом случае.

Если бы мы попытались пошагово понять, что происходит внутри этих циклов:

for (int i = 2; i >= 0; i--) {
    for (int j = 0; j <= 2; j++) {
        FinalOrder[j] = FirstOrder[i];
    }
}

Тогда выполняемые операции будут выглядеть так:

FinalOrder[0] = FirstOrder[2]
FinalOrder[1] = FirstOrder[2]
FinalOrder[2] = FirstOrder[2]
FinalOrder[0] = FirstOrder[1]
FinalOrder[1] = FirstOrder[1]
FinalOrder[2] = FirstOrder[1]
FinalOrder[0] = FirstOrder[0]
FinalOrder[1] = FirstOrder[0]
FinalOrder[2] = FirstOrder[0]

В случае таких операций ваш вывод будет: "The The The", поскольку первый элемент массива FirstOrder назначен всем индексамиз массива FinalOrder как последние 3 операции.

Таким образом, вы не можете использовать подобные циклы для достижения того, чего хотите достичь. Для этого я бы предпочел сделать что-то вроде:

for (int i = 2; i >= 0; i--) {
    FinalOrder[2 - i] = FirstOrder[i];
}

Кроме того, вам не нужно заполнять массив FinalOrder элементами. Вы можете просто создать пустой массив размером 3, например:

String[] FinalOrder = new String[3];

1 голос
/ 26 октября 2019

Вы присваиваете одинаковые значения всем элементам массива FinalOrder во вложенном цикле.

Final order[0]: Cat 
Final order[1]: Cat 
Final order[2]: Cat 
Final order[0]: Black   
Final order[1]: Black   
Final order[2]: Black   
Final order[0]: The 
Final order[1]: The 
Final order[2]: The

Попробуйте:

public static void outputInReverse(String[] FirstOrder) {
    String[] FinalOrder = new String[] {"One", "Two", "Three"};

    int j = 0;
    for (int i = 2; i >= 0; i--) {
            FinalOrder[j] = FirstOrder[i];
            j++;
    }
    System.out.println(Arrays.toString(FinalOrder));
}

Вывод:

[Cat, Black, The]
0 голосов
/ 26 октября 2019

Я попробовал ваш код с помощью компилятора Java с небольшим изменением, добавив оператор печати:

import java.util.Arrays;
public class MyClass {
    public static void main(String[] args) {

        String[] ArrayInput = new String[] { "The", "Black", "Cat" };

        outputInReverse(ArrayInput);

    }




    public static void outputInReverse(String[] FirstOrder) {
        String[] FinalOrder = new String[] {"One", "Two", "Three"};

        for (int i = 2; i >= 0; i--) {
            for (int j = 0; j <= 2; j++) {
                FinalOrder[j] = FirstOrder[i];
                System.out.println(FinalOrder[j]);

            }
        }
        System.out.println(Arrays.toString(FinalOrder));
    }

}

Вывод выглядит так:

Cat

Кошка

Кошка

Черный

Черный

Черный

[The, The]

Интуиция:

Во внутреннем цикле вы фактически присваиваете каждому из FinalOrderто же значение FirstOrder[i], поэтому для его устранения вы можете использовать оператор break или простой код Хулии.

Вы можете легко научиться отлаживать, используя оператор print:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...