Логическое значение Java не имеет значения true

Мой код принимает строку, введенную пользователем, и возвращает количество слов, а также первое слово. Когда пользователь вводит пустую строку, я не хочу, чтобы отображалось «В вашей строке x слов» или «Первое слово - x», поэтому я создал boolean, но boolean не устанавливается в методе, который я пытался установить. это в true. Любая помощь, которую я могу получить о том, почему и как это исправить, была бы замечательной. Спасибо!

public static void main(String[] args){
    boolean empty = false;
    Scanner in = new Scanner(System.in);
    System.out.print("Enter a string: ");
    String str = in.nextLine();

    if (empty == false) {
        System.out.println("Your string has " + getWordCount(str)+" words in it.");
        System.out.println("The first word is: " + firstWord(str));
    }
}

public static String firstWord(String input) {

    for(int i = 0; i < input.length(); i++)
    {
        if (input.charAt(i) == ' ')
        {
            return input.substring(0, i);
        }
    }

    return input; 
}    

 public static int getWordCount(String str){
       int count = 0;

       if (str != null && str.length() == 0){ 
           System.out.println("ERROR - string must not be empty.");
           empty = true;
       }

       else if (!(" ".equals(str.substring(0, 1))) || !(" ".equals(str.substring(str.length() - 1)))){

            for (int i = 0; i < str.length(); i++){

                if (str.charAt(i) == ' '){
                    count++;
                }
            }
            count = count + 1; 
        }
    return count;
    }
 }

Вы забываете повторно установить пустое значение на str.length () == 0

fasaas 03.10.2018 20:05

это другая проблема. объем логических разный? !!

Amin 03.10.2018 20:06

1) Это не будет компилироваться. empty не входит в ваш метод. 2) Java передается по значению, что означает, что даже если вы передаете empty методу, вы просто передаете ценитьempty, а не фактическую переменную.

GBlodgett 03.10.2018 20:07

И здесь нужно немного переосмыслить свою логику. Вы проверяете, является ли empty истинным до, вы вызываете getWordCount(), который установит для empty значение true

GBlodgett 03.10.2018 20:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
509
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Здесь вам нужно переосмыслить свою логику (см. Фрагмент ниже):

  • Во-первых: вам не нужна переменная empty
  • Вы можете узнать, пусто ли «слово», вызвав метод getWordCount и сохранив результат в переменной (wordCount?). Затем вы можете проверить, есть ли хотя бы одно слово, выполнив wordCount > 0.

Фрагмент:

    public static void main(String[] args){
        // boolean empty = false;           // --> not needed
        Scanner in = new Scanner(System.in);
        System.out.print("Enter a string: ");
        String str = in.nextLine();
        final int wordCount = getWordCount(str);

        if (wordCount > 0) { // show message only if there is at least one word
            System.out.println("Your string has " + wordCount +" words in it.");
            System.out.println("The first word is: " + firstWord(str));
        }
    }

    public static String firstWord(String input) {
        // .. code omitted for brevity
    }

    public static int getWordCount(String str){
        int count = 0;

        if (str != null && str.length() == 0){
            System.out.println("ERROR - string must not be empty.");
            // empty = true; -->  not needed
        }

        // ... code omitted for brevity
        return count;
    }

вам просто нужно поменять место, если ради видимости переменной.

public static void main(String[] args) {
        boolean empty = false;
        Scanner in = new Scanner(System.in);
        System.out.print("Enter a string: ");
        String str = in.nextLine();

        if (str != null && str.length() == 0) {
            System.out.println("ERROR - string must not be empty.");
            empty = true;
        }

        if (empty == false) {
            System.out.println("Your string has " + getWordCount(str) + " words in it.");
            System.out.println("The first word is: " + firstWord(str));
        }
    }

public static String firstWord(String input) {

        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ' ') {
                return input.substring(0, i);
            }
        }

        return input;
    }

public static int getWordCount(String str) {
        int count = 0;

        if (!(" ".equals(str.substring(0, 1))) || !(" ".equals(str.substring(str.length() - 1)))) {

            for (int i = 0; i < str.length(); i++) {

                if (str.charAt(i) == ' ') {
                    count++;
                }
            }
            count = count + 1;
        }
        return count;
    }

Если вы действительно хотите использовать логическое значение, попробуйте создать логический метод с использованием строкового параметра, который возвращает истину, только если строка не пуста, а затем присвойте логический тип возврата логической переменной empty.

что означает "пустой" в ... пустая логическая переменная?

lealceldeiro 03.10.2018 23:04

Вы создали логическую переменную с именем empty. Это то, что я имею в виду

Tega Steve 04.10.2018 00:31

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