Массив напротив строки. Необходимо использовать массивы [дубликаты]

avatar
Lotun Kanji
7 апреля 2018 в 21:49
65
3
0

Как составить массив с буквами, противоположными первому массиву, который я создаю? Например, если строка «Hello», я хочу использовать массивы для вывода «olleH». Когда я пытаюсь вернуть переменные, он говорит мне: «Индекс строки вне диапазона: -1». Кто-нибудь может сказать мне, почему? Это мой код:

public class april{


public static void main(String [] args){

System.out.println("What do you want backwards?");
System.out.println("Your new word is " + reverse(IO.readString()));

}

public static String reverse(String original){

    char [] letters = new char [original.length()];
    char [] opp = new char [original.length()];
    char c= 'a';
    char d= 'a';
    String word= " ";
    String opposite= " ";

    for (int x=0;x<original.length();x++){
        c = original.charAt(x);
        letters[x]= c;
        if (x!=0){
        d = original.charAt(-x-1);
        opp[-x]=d;
        }
        else if (x==0){
        d = original.charAt(-1);
        opp[x]= d; 
        }
        word += letters[x];
        opposite += opp[x];

    }

    return word;
    return opposite;
Источник
Lotun Kanji
7 апреля 2018 в 21:50
0

еще одна проблема, которую я заметил, заключается в том, что для негативов, если цикл был на нуле, я не смог бы распечатать отрицательный 0, потому что такой вещи не существует. Как это исправить?

nitnamby
7 апреля 2018 в 21:56
0

Вы можете использовать StringBuilder и вызвать для него reverse()

Ответы (3)

avatar
Gabriel
7 апреля 2018 в 22:21
1

Ваш метод получает String и возвращает другой String, поэтому вам вообще не нужно работать с массивами, просто используйте метод reverse класса StringBuilder.

public static String reverse(String original) {
    return new StringBuilder(original).reverse().toString();
}
avatar
Eduardo Folly
7 апреля 2018 в 22:09
1

Я думаю, это отличный способ сделать это.

public class Main {

    public static void main(String[] args) {
        String reversed = reverse("Hello");
        System.out.println(reversed);
    }

    private static String reverse(String word) {
        byte[] array = word.getBytes();
        int i = 0;
        int j = array.length - 1;
        byte tmp;
        while (j > i) {
            tmp = array[j];
            array[j] = array[i];
            array[i] = tmp;
            j--;
            i++;
        }
        return new String(array);
    }
}
avatar
Jacob G.
7 апреля 2018 в 22:02
1

Вы рядом! Вам просто нужно начать с другого конца String для второго массива (с правильным синтаксисом):

for (int x = 0; x < original.length(); x++) {
    char c = original.charAt(x);
    char d = original.charAt(original.length() - x - 1);
    letters[x] = c;
    opp[original.length() - x - 1] = d;
}

Примечание. Вы также должны вычесть 1, так как и массивы, и строковые индексы имеют нулевой индекс.

Lotun Kanji
7 апреля 2018 в 23:21
0

Он продолжает говорить мне «недостижимый оператор» для переменной напротив

Jacob G.
7 апреля 2018 в 23:35
0

@LotunKanji Это не имеет ничего общего с моим кодом, но похоже, что вы пытаетесь использовать opposite за пределами его определенной области.

Lotun Kanji
7 апреля 2018 в 23:55
0

Что именно это значит?

Jacob G.
8 апреля 2018 в 00:03
0

@LotunKanji См.: coderhelper.com/questions/18308159/…