я хочу написать программу, которая сначала получает целое число, которое представляет собой количество строк символов, которые должны быть введены, включая 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
всегда ложно, а это значит, что вы никогда не добавляете temp
к результату. И даже если CAPSval
волшебным образом изменится на true
: вы никогда не назначите temp
ничего, кроме пустой строки, и поэтому result
никогда не изменится.
Критерий выхода из цикла неверен - он не должен основываться на длине result
, вы должны просто зацикливаться n
раз.
вы можете установить ограничение на время
CAPSval, если первая кнопка вторая, ее значение равно false или true
если CAPSval == true одиночное изменение на Верхнее, иначе на Нижнее
если n == 0, в то время как конец и результат вывода
Извините, я обновляю решение, которое вы уведомляете о заглавных буквах кнопок в первый раз, и если вы не вводите заглавные буквы кнопок, вы вводите верхний или нижний символ, а затем выводите то же самое с вводом
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 раз, это проще.
Имеет смысл. Обновлено! В этом случае нам также не нужен CAPScounter
Вы никогда не меняете
CAPSval
с ложного на истинное.