Вложен для l oop, не поднимая первый экземпляр в массиве - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь закодировать слово, и я не уверен, почему мои циклы for не получают первый экземпляр, 0. Вход для этого метода - «This» и 3. Выход из этого метода - klv , Так что мой l oop не должен работать должным образом, так как буква T пропускается. Что не так с моими петлями?

String encodeWord(String word, int Shift) {

        //word = "This"
        //Shift = 3, is how far the letter is shifted to the right of the original 
        char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
        char[] temp = word.toCharArray();
        char[] FA = new char[temp.length];
        String tempWord = "";
        StringBuilder sb = new StringBuilder(64);




    for (int x = 0; x < word.length(); x++) {

            for (int y = 0; y < alphabet.length; y++) {
                if (word.charAt(0) == alphabet[y]) {
                    FA[0] = alphabet[y + shift];
                    System.out.println(FA[0]);
                }
            }
        }

        for (int i = 0; i < word.length(); i++) {

            for (int j = 0; j < alphabet.length; j++) {
                if (word.charAt(i) == alphabet[j]) {
                    FA[i] = alphabet[j + shift];
                    sb.append(FA[i]);
                    System.out.println(FA[i]);
                }

            }
        }
        System.out.println(sb);

        return sb.toString();
    }

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020
public static String encoder(String word, int shift)
{
    static const int max_char = 122; //letter 'z'
    static const int min_char = 97;  //letter 'a'
    char[] c_array = word.toCharArray();
    char[] encoded_string = new char[c_arary.length()];

    for(for i = 0; i < c_array.length(); i++)
    {
        if( ((int)c + shift) > max_char) //makes sure that the ascii isnt a non number
        {
             encoded_string[i] = (min_char + (int)c + shift - max_char );  // this will correct the overflow 
        }

        c = c + shfit;
    }

    return encoded_string;
}

Это более простой способ сделать это ... также у ваших циклов есть несколько логических ошибок ... первая, которую я поймал, была в первом l oop ... если в вашем слове есть az Вы собираетесь переполнить ваш алфавитный массив.

Это использует табличный способ Ascii

0 голосов
/ 06 апреля 2020

Буква 'T' отличается от буквы 't', поэтому, поскольку в вашем массиве найдена только буква 't', программа не найдет совпадение с буквой 'T'.

Другая проблема с вашим кодом состоит в том, что вы получите исключение Index вне границ, если входные данные содержат буквы 'x', 'y' или 'z', поскольку в массиве нет 3 букв после них.

...