Java меняет верхний или нижний регистр, вводя CAPS

я хочу написать программу, которая сначала получает целое число, которое представляет собой количество строк символов, которые должны быть введены, включая CAPS, и я хочу, чтобы после каждого введенного CAPS остальные символы изменялись в верхнем или нижнем регистре (по умолчанию сначала используется нижний регистр) и, наконец, программа выводит окончательную строку. вот пример: вход:

8
s
f
k
CAPS
h
j
CAPS
p

выход:

sfkHJp

вот что я пробовал до сих пор. Сначала я хотел проверить, сработает ли этот алгоритм или нет, но на самом деле это не сработало, потому что он вообще не печатает результат!

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int CAPScounter = 0;
        String result = "";
        String temp = "";
        String singles = "";
        boolean CAPSval = false;

        if (CAPSval) {
            singles = "CAPS";
        }

        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        // System.out.print(n);

        while (true) {
            if (result.length() == n - CAPScounter) {
                break;
            }
            //temp += input.next();
            singles = input.next();
            if (CAPSval) {
                CAPScounter += 1;
                result += temp;
                temp = "";
            }
        }
        System.out.print(result);
    }
}

  

Вы никогда не меняете CAPSval с ложного на истинное.

Andy Turner 17.02.2023 11:23

Ваше CAPSval всегда ложно, а это значит, что вы никогда не добавляете temp к результату. И даже если CAPSval волшебным образом изменится на true: вы никогда не назначите temp ничего, кроме пустой строки, и поэтому result никогда не изменится.

Thomas Kläger 17.02.2023 11:35

Критерий выхода из цикла неверен - он не должен основываться на длине result, вы должны просто зацикливаться n раз.

Andy Turner 17.02.2023 11:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

  1. вы можете установить ограничение на время

  2. CAPSval, если первая кнопка вторая, ее значение равно false или true

  3. если CAPSval == true одиночное изменение на Верхнее, иначе на Нижнее

  4. если n == 0, в то время как конец и результат вывода

  5. Извините, я обновляю решение, которое вы уведомляете о заглавных буквах кнопок в первый раз, и если вы не вводите заглавные буквы кнопок, вы вводите верхний или нижний символ, а затем выводите то же самое с вводом


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int CAPScounter = 0;
        String result = "";
        String singles = "";
        boolean CAPSval = false, fistButton = false;
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        while (n-- > 0) {
            singles = input.next();
            if (singles.equals("CAPS")) {
                fistButton = true;
                CAPSval = !CAPSval;
                CAPScounter += 1;
            } else {
                if (fistButton) {
                    if (CAPSval)
                        singles = singles.toUpperCase();
                    else singles = singles.toLowerCase();
                }
                result += singles;
            }

        }
        System.out.print(result);
    }
}

Ответ принят как подходящий

Это может быть простое решение:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String result = "";
        String singles = "";
        boolean isCAPSEnabled = false;

        Scanner input = new Scanner(System.in);
        int n = input.nextInt();

        while (n-- > 0) {
            singles = input.next();
            if (singles.equals("CAPS")) {
                isCAPSEnabled = !isCAPSEnabled; // reverse
            } else {
                result += isCAPSEnabled ? singles.toUpperCase() : singles.toLowerCase(); 
            }
        }
        System.out.print(result);
    }
}

Обратите внимание, что условие в цикле while предполагает, что каждая лексема состоит только из одного символа. Если они будут длиннее, они сломаются слишком быстро. Просто зациклите n раз, это проще.

Andy Turner 17.02.2023 12:53

Имеет смысл. Обновлено! В этом случае нам также не нужен CAPScounter

Islam Elbanna 17.02.2023 13:01

Другие вопросы по теме