Java Do-While L oop сохраняет предыдущее содержимое l oop - PullRequest
0 голосов
/ 05 августа 2020

Я делаю это как домашнее задание для моего первого урока CS, так что я новичок в Java. Цель состоит в том, чтобы создать программу, которая проверяет ввод пользователя для указанной переменной Java. Есть три условия / вывода:

  1. «Недопустимый» (пробелы не допускаются, должны начинаться с буквы)
  2. «Допустимо, но используется плохой стиль» (следует использовать только буквы или цифр)
  3. «Хорошо!»

Если я запустил эту программу и наберу что-то вроде «переменная» для первого l oop, она будет go до конца и напечатана Хорошо!" к концу. И когда программа снова спросит, и я наберу что-то вроде «4variable», она вернет «Illegal» - это имеет смысл. Проблема возникает сразу после этого. Если я снова наберу следующую переменную, например, «переменная», она вернет «Illegal», потому что все еще думает, что в позиции первого символа есть di git. Когда я отлаживаю, он показывает логическое значение "number", установленное в 'true', даже если оно false. Я не могу заставить его отказаться от предыдущей итерации l oop.

Вот мой код:

import java.util.Scanner;

public class IdentifierTestThree {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String userVariable = "";
        char ch = ' ';
        boolean space = false;
        boolean number = false;
        boolean capital = false;
        //boolean specialCharacter = false;
        boolean style = false;


        // State what this program does
        System.out.println("This program checks to see if a Java variable is legal or not.");

        // Get input from user
        System.out.println("Enter a variable: ");
        userVariable = in .nextLine();

        do {
            int variableParse = userVariable.length();
            for (int i = 0; i < variableParse; i++) {
                if ((Character.isLetterOrDigit(userVariable.charAt(i)) == false)) {
                    style = true;
                }
            }

            // Get the first character
            ch = userVariable.charAt(0);

            // Check each stipulation
            if (Character.isUpperCase(ch)) {
                capital = true;
            }
            if (Character.isDigit(ch)) {
                number = true;

            }
            if (userVariable.contains(" ")) {
                space = true;
            }

            if (space || number || capital) {
                System.out.println("Illegal");
            } else if (style) {
                System.out.println("Legal, but uses poor style.");
            } else {
                System.out.println("Good!");
            }

            // Ask the user to enter another variable or end the program
            System.out.println("Enter another variable or type 'Q' to quit.");
            userVariable = in .nextLine();

        } while (!userVariable.equalsIgnoreCase("Q"));

    }

}

1 Ответ

0 голосов
/ 05 августа 2020

Вам нужно сбросить пробел, число, заглавную букву и стиль внутри do-l oop, который обрабатывает одну переменную. Фактически, вы также можете переместить туда объявления, поскольку значения вне этого l oop.

do { 
    boolean space = false;
    boolean number = false;
    boolean capital = false;
    //boolean specialCharacter = false;
    boolean style = false;

    int variableParse = userVariable.length();
    for (int i = 0; i < variableParse; i++) {
       if ((Character.isLetterOrDigit(userVariable.charAt(i)) == false)) {
           style = true;
       }
    }

    // Get the first character
    char ch = userVariable.charAt(0);


              …
не требуются.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...