#java #string #character
#java #строка #символ
Вопрос:
Я пытаюсь написать простую программу, которая запрашивает у пользователя ввод, состоящий из нулей и единиц, и проверяет каждый символ в поисках двойного нуля ’00’, если текущий символ равен ‘1’, программа считается находящейся в состоянии «A», и поэтому она выводит состояние исимвол, если символ равен ‘0’, программа находится в состоянии «B», а если есть ’00’, программа находится в состоянии «C», после входа в состояние «C» (после нахождения ’00’) программа не может выйти из этого состояния, это означаетчто он будет продолжать проверять каждый символ, но результирующая строка должна быть символом «State C» , даже если символ представляет собой один ноль или единицу.
На данный момент у меня есть что-то вроде этого
import java.util.Scanner;
public class onesandzeroes {
public static void main(String[] args) {
System.out.println("Write a String that consists of 0 and 1");
Scanner scanner = new Scanner(System. in);
String inputString = scanner.nextLine();
for (int index = 0; index < inputString.length();
index ) {
char aChar = inputString.charAt(index);
if (aChar == '0'){
System.out.println("State B " aChar);
/* This is the part I'm having trouble with, I was thinking about something like
if(aChar =='0' amp;amp; charAt(index 1 == '0')){
System.out.println("State C" aChar charAt(index 1);
}
to look for a '0' that is followed by another '0' but it doesn't work
*/
} else{
System.out.println("State A " aChar);
}
}
}
}
Я знаю, что вы, вероятно, можете просмотреть всю строку и проверить, есть ли только ’00’, но я хочу проверять каждый символ по отдельности, за исключением случаев, когда он ищет ’00’
Итак, у меня есть 2 вопроса: Как я могу искать ’00’ в строке? Идеальным способом было бы проверять каждый ‘0’ на наличие следующего ‘0’.
И как я могу заставить программу печатать «Состояние C» символ ТОЛЬКО после того, как будет найден первый ’00’? то есть после того, как программа найдет ’00’, она должна оставаться в состоянии C для ’00’ и любого другого символа, следующего за ним.
Комментарии:
1. inputString.contains(«00») ?
Ответ №1:
может быть, так:
import java.util.Scanner;
public class StringScanner {
public static void main(String[] args) {
System.out.println("Write a String that consists of 0 and 1");
final var scanner = new Scanner(System.in);
final String inputString = scanner.nextLine();
var currentState = State.A;
for (int index = 0; index < inputString.length(); index ) {
final char currentChar = inputString.charAt(index);
System.out.println("The current char is " currentChar " and I'm in state " currentState);
if (currentState == State.C) {
// do nothing because final state has already been reached
continue;
}
if (currentState == State.B) {
if (currentChar == '0') {
// 2 zeros found got into final state :)
currentState = State.C;
} else {
//
currentState = State.A;
}
continue;
}
if (currentState == State.A) {
if (currentChar == '0') {
currentState = State.B;
}
}
}
}
private enum State {
A, B, C
}
}
Комментарии:
1. Я ценю все ответы, но ваш был самым полезным, я уже думал о создании строковой переменной с именем «state», но ваше решение намного элегантнее, я не знаю (пока), что означает «enum», поэтому я рассмотрю его сейчас, Спасибо!
Ответ №2:
Во-первых, вы можете проверить inputString.contains("00");
, является ли true write
inputString.charAt(inputString.indexOf("00") 2);