Java while循环:while语句不包含单词

Java while循环:while语句不包含单词,java,java.util.scanner,Java,Java.util.scanner,我正在获取用户输入并检查句子中是否有“java”一词。我做了一个while循环,但即使句子中有“java”这个词,它也会告诉我它不是,并继续while循环。如果我删除while循环,我希望我的程序执行的所有其他操作都能正常工作。代码如下: import java.util.Scanner; public class Main { public static void main(String[] args) { //declare all variables

我正在获取用户输入并检查句子中是否有“java”一词。我做了一个while循环,但即使句子中有“java”这个词,它也会告诉我它不是,并继续while循环。如果我删除while循环,我希望我的程序执行的所有其他操作都能正常工作。代码如下:

import java.util.Scanner;

    public class Main {

    public static void main(String[] args) {

        //declare all variables
        String sentence;
        int java_index_number;
        String stop_program;
        String java;
        String Java;
        String JAVA;
        String java_capital_first_letter;
        String java_all_caps;

        //scanner to get user input
        Scanner user_input = new Scanner(System.in);

        //prompt the user for a sentence
        System.out.print("Enter a line of text containing the word 'java' somewhere within it: ");
        sentence = user_input.nextLine();

        java = "java";
        Java = "Java";
        JAVA = "JAVA";
        while(!sentence.contains(java) || !sentence.contains(Java) || !sentence.contains(JAVA)) {
            System.out.println("Your sentence does not have the word 'java' within it.");
            System.out.print("Enter a line of text containing the word 'java' somewhere within it: ");
            sentence = user_input.nextLine();
        }

        //output
        System.out.println();
        System.out.println("The string read is: " + sentence);
        System.out.println("Length in chars is: " + sentence.length());
        System.out.println("All lowercase is: " + sentence.toLowerCase());
        System.out.println("All uppercase is is: " + sentence.toUpperCase());

        //store java index pos in variable
        java_index_number = sentence.indexOf("java");
        System.out.println("Found 'java' or at pos: " + java_index_number);


        //make first letter of java a capital letter
        java_capital_first_letter = sentence.substring(0, java_index_number) + sentence.substring(java_index_number,
                java_index_number + 1).toUpperCase() + sentence.substring(java_index_number + 1, java_index_number + 4)
                + sentence.substring(java_index_number + 4);

        //make java all caps
        java_all_caps = sentence.substring(0, java_index_number) + sentence.substring(java_index_number,
                java_index_number + 4).toUpperCase() + sentence.substring(java_index_number + 4);

        //output
        System.out.println("Changing to 'Java': " + java_capital_first_letter);
        System.out.println("Changing to 'JAVA': " + java_all_caps);

        // Keep console window alive until 'enter' pressed
        System.out.println();
        System.out.println("Done - press enter key to end program");
        stop_program = user_input.nextLine();


    }
}
如何使while循环工作

更新:在我得到了非常棒的反馈之后,我终于让它开始工作了。。谢谢所有帮助过我的人

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        //declare all variables
        String sentence;
        int java_index_number;
        String stop_program;
        String java_capital_first_letter;
        String java_all_caps;

        //scanner to get user input
        Scanner user_input = new Scanner(System.in);

        //prompt the user for a sentence
        System.out.print("Enter a line of text containing the word 'java' somewhere within it: ");
        sentence = user_input.nextLine();


        while(!sentence.toLowerCase().contains("java")) {
            System.out.println("Your sentence does not have the word 'java' within it.");
            System.out.print("Enter a line of text containing the word 'java' somewhere within it: ");
            sentence = user_input.nextLine();
        }

        //output
        System.out.println();
        System.out.println("The string read is: " + sentence);
        System.out.println("Length in chars is: " + sentence.length());
        System.out.println("All lowercase is: " + sentence.toLowerCase());
        System.out.println("All uppercase is is: " + sentence.toUpperCase());

        //store java index pos in variable
        sentence = sentence.toLowerCase();
        java_index_number = sentence.indexOf("java");
        System.out.println("Found 'java' or at pos: " + java_index_number);


        //make first letter of java a capital letter
        java_capital_first_letter = sentence.substring(0, java_index_number) + sentence.substring(java_index_number,
                java_index_number + 1).toUpperCase() + sentence.substring(java_index_number + 1, java_index_number + 4)
                + sentence.substring(java_index_number + 4);

        //make java all caps
        java_all_caps = sentence.substring(0, java_index_number) + sentence.substring(java_index_number,
                java_index_number + 4).toUpperCase() + sentence.substring(java_index_number + 4);

        //output
        System.out.println("Changing to 'Java': " + java_capital_first_letter);
        System.out.println("Changing to 'JAVA': " + java_all_caps);

        // Keep console window alive until 'enter' pressed
        System.out.println();
        System.out.println("Done - press enter key to end program");
        stop_program = user_input.nextLine();


    }
}

尽量避免使用“Java”的所有这些不同变量。我认为您正在试图找到java何时出现。因此,将一个句子应用到你的句子中。toLowerCase()包含(“java”) 用户输入将转换为小写,只需检查是否包含小写的java,这样您就可以避免使用太多的或。
在while中,只需放置一个while(true),并使用if(语句.toLowerCase().contains(“java”){break;}进行检查

尽量避免使用“Java”的所有这些不同变量。我认为您正在试图找到java何时出现。因此,将一个句子应用到你的句子中。toLowerCase()包含(“java”) 用户输入将转换为小写,只需检查是否包含小写的java,这样您就可以避免使用太多的或。
在while中,只需放置一个while(true),并使用if(语句.toLowerCase().contains(“java”){break;}进行检查

问题在于如何在while中创建布尔子句。因此,目前您有:

while(!sentence.contains(java) || !sentence.contains(Java) || !sentence.contains(JAVA))
让我们假设这个句子包含“java”。所以,
!contains(java)
为false。然而,
!contains(Java)
为true,因为该句子包含“Java”而不是“Java”。因为您使用的是逻辑OR(
|
),所以一个true就足以使整个子句为true,并且while循环的内部被执行

也许,您要做的是这样:

while(!sentence.contains(java) && !sentence.contains(Java) && !sentence.contains(JAVA))

在这种情况下,上述所有子句都必须为true,这意味着句子不能包含“java”、“java”或“java”。

问题在于如何在while中创建布尔子句。因此,目前您有:

while(!sentence.contains(java) || !sentence.contains(Java) || !sentence.contains(JAVA))
让我们假设这个句子包含“java”。所以,
!contains(java)
为false。然而,
!contains(Java)
为true,因为该句子包含“Java”而不是“Java”。因为您使用的是逻辑OR(
|
),所以一个true就足以使整个子句为true,并且while循环的内部被执行

也许,您要做的是这样:

while(!sentence.contains(java) && !sentence.contains(Java) && !sentence.contains(JAVA))

在这种情况下,上面的所有子句都必须为true,这意味着句子不能包含“java”、“java”或“java”。

大声朗读中的条件。用英语。“虽然句子不包含‘java’或它不包含‘java’…”看到问题了吗?您确实需要研究使用数组而不是混杂的不规则变量。@John3136如果句子不包含‘java’,则继续循环。。。我想,一旦这个句子包含“java”,它就会跳出while循环。@tadman我明白你的意思了。我一定会把它改成数组。我似乎仍然会遇到同样的问题,不管怎样,试着输入“Hello java”-这可能有助于理解发生了什么。用英语。“虽然句子不包含‘java’或它不包含‘java’…”看到问题了吗?您确实需要研究使用数组而不是混杂的不规则变量。@John3136如果句子不包含‘java’,则继续循环。。。我想,一旦这个句子包含“java”,它就会跳出while循环。@tadman我明白你的意思了。我一定会把它改成数组。似乎我仍然会遇到同样的问题,无论是哪种方式,试着输入“Hello java”-这可能有助于理解发生了什么。提供替代实现而不解释问题中的逻辑错误不是一个好答案。提供替代实现而不解释问题中的逻辑错误不是一个好答案。