Попытка сделать altcase.Чар разыменован, как мне это исправить? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь сделать altcase.Большая часть программы работает, за исключением случаев, когда я объединяю строки в операторе if и else.(где newstr = newstr ....) Если это должно быть выполнено, то должно появиться «I HoPe aLtCaSe wOrKs»

public class tester {

    public static void main(String[] args) {

        System.out.println(altCase("i hope altcase works"));
    }
         public static String altCase(String text)
    {
        int COUNT = text.length();
        char c;
        int check = 0;
        String newstr = "";
        for (int i = 0; i < COUNT; i++)
        {
            c = text.charAt(i);
            if(check == 0) {
                c = c.toUpperCase();
                newstr = newstr + c;
                check++;
            }
            else {
                c = c.toLowerCase();
                newstr = newstr + c;
                check--;
            }
        }
        return newstr;
    }
}

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Я бы назвал String.toCharArray(), а затем преобразовал бы четные индексы в верхний регистр с Character.toUpperCase(char) и нечетные индексы в строчные с Character.toLowerCase(char).Наконец, верните новый String на основе обновленного char[].Например,

public static String altCase(String text) {
    char[] arr = text.toCharArray();
    for (int i = 0; i < arr.length; i++) {
        if (i % 2 == 0) {
            arr[i] = Character.toUpperCase(arr[i]);
        } else {
            arr[i] = Character.toLowerCase(arr[i]); 
        }
    }
    return new String(arr);
}

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

public static String altCase(String text) {
    char[] arr = text.toUpperCase().toCharArray();
    for (int i = 1; i < arr.length; i += 2) {
        arr[i] = Character.toLowerCase(arr[i]);
    }
    return new String(arr);
}

Я предполагаю, что ввод не всегда строго строчный.Если это так, то было бы тривиально пропустить предварительное преобразование и применить тот же подход к четным индексам.Мол,

public static String altCase(String text) {
    char[] arr = text.toCharArray();
    for (int i = 0; i < arr.length; i += 2) {
        arr[i] = Character.toUpperCase(arr[i]);
    }
    return new String(arr);
}
0 голосов
/ 10 октября 2018

Если вам нужно решение без использования toUpperCase() или toLowerCase(), я предлагаю вам попробовать это.

public class Tester {

    public static void main(String[] args) {
        System.out.println(altCase("i hope altcase works"));
    }

    public static String altCase(String text) {
        char[] array = text.toCharArray();
        text ="";
        for (int i = 0; i < array.length; i++) {
            text += (i%2!=0)?array[i]:Tester.utilityToUpper(array[i]);
        }
        return text;
    }

    public static char utilityToUpper(char i){
        return (char) ((i!=' ')? (i - 32) : i);
    }

}
0 голосов
/ 10 октября 2018

код должен быть таким

public static void main(String[] args) {

        System.out.println(altCase("i hope altcase works"));
    }
    public static String altCase(String text)
    {
        int COUNT = text.length();
        char c;
        int check = 0;
        String newstr = "";
        for (int i = 0; i < COUNT; i++)
        {
            c = text.charAt(i);
            if(c==' ') {
                newstr = newstr + c;
                continue;

            }
            if(check == 0) {
                c = (char)(c-32);
                newstr = newstr + c;
                check++;
            }
            else {
                newstr = newstr + c;
                check--;
            }
        }
        return newstr;
    }
...