Функция возвращает входные данные без изменений, несмотря на их изменение в функции - PullRequest
0 голосов
/ 06 марта 2019

Что касается приведенного ниже кода, у меня возникла проблема, когда все работает нормально, но я не получаю желаемый результат.

Код должен принимать пользовательский ввод и печатать его, но все буквы в обратном порядке. Однако даже если toggleCase работает без проблем, когда вход возвращается в toggleStringCase, он возвращается к тому, что был до отправки в toggleCase.

Мне трудно понять, почему это происходит.

Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении.

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

package loopy;
import java.io.*;

public class loopy {
    public static void main (String[] args) throws IOException {
        // TODO: Use a loop to print every upper case letter
        for (int i = 65; i < 91; i++) {
            System.out.println((char)i);
        }
        // TODO: Get input from user. Print the same input back but with cases swapped. Use the helper functions below.
         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        String input = in.readLine();
        in.close();     

        toggleStringCase(input);

        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
        out.write(input);
        out.close();
    }

    //Takes a single Character and reverse the case if it is a letter
    private static char toggleCase(char c) {
        int asciiValue = (int) c;
        if (asciiValue > 96 && asciiValue < 123){
            asciiValue = asciiValue - 32;
        }
        else if (asciiValue > 64 && asciiValue < 91){
            asciiValue = asciiValue + 32;
        }
        else {

        }
        c = (char) asciiValue;
        return c;
    }

    // Splits a string into individual characters that are sent to toggleCase to have their case changed
    private static String toggleStringCase(String str) {
        String reversedCase = new String();
        for (int i = 0; i < str.length(); i++) {
            char letter = str.charAt(i);
            toggleCase(letter);
            reversedCase = reversedCase + letter;
        }
        str = reversedCase;
        return str;
    }
}

Ответы [ 2 ]

4 голосов
/ 06 марта 2019
toggleStringCase(input);

Я думаю, вы можете получить вывод этой функции.Вы, кажется, предполагаете, что входные данные будут изменены - это не так.См. Является ли Java "передачей по ссылке" или "передачей по значению"?

3 голосов
/ 06 марта 2019

Параметры в Java передаются по значению.Вы не можете изменить значение, переданное методу таким образом.Однако вы возвращаете нужное значение - просто присвойте его обратно вашей переменной:

input = toggleStringCase(input);
...