【问题标题】:Trouble with comparing Char from two different strings比较来自两个不同字符串的 Char 时遇到问题
【发布时间】:2020-01-02 11:24:48
【问题描述】:

该程序应该是一个包含 10 个不同单词的词汇表测试。我的代码正在工作,除了一件事,它是一个函数,如果某些字符是正确的,那么它是一个允许用户获得输出“几乎正确,正确答案是......”的函数。

例如;正确答案是房子。

user writes: housq -> output = "Almost correct, the correct answer is..."

user writes hsasa -> output = "Wrong, the correct answer is..."

我的计划是通过 int count 将“几乎正确”放在值 1-3 之间的范围内。

但是有了这个循环: 它只计算拼写正确的单词,例如

Correct word is house.

input -> house -> count=5

input -> housa -> count=0.

我是 Java 新手,对于潜在的错误代码,我向大家道歉。

     Scanner scanner = new Scanner(System.in);
    String inputString = "";
    String[] eng = {"car", "house", "run", "blue", "bake", "jump", "swim", "moon", "road", "kind"};
    String[] swe = {"bil", "hus", "springa", "blå", "baka", "hoppa", "simma", "måne", "väg", "snäll"};
    int result = 0;
    int word = 0;
    int count = 0;
    int low = 2;
    int high = 3;

    for (int i = 0; i < swe.length; i++) {
        System.out.println(swe[i]);
        inputString = scanner.nextLine().trim();

        if (inputString.equalsIgnoreCase(eng[i])) {
            word++;
            result++;
            System.out.println("Korrekt! " + result + " rätt av " + word + " ord.");

            for (int j = 0; j < inputString.length(); j++) {
                if (inputString.charAt(j) == eng[i].charAt(j)) {
                    ++count;

                }
            }
                      if(count >= low){
                    System.out.println("Nästan rätt, korrekt svar är " + eng[i]);
                    word++;
                }


                if(count > low && count < high){
                    System.out.println("Nästan rätt, korrekt svar är " + eng[i]);
                    word++;
                }
        if (count == 0) {
            System.out.println("fel, rätt svar är " + eng[i]);
            word++;
        }
        System.out.println(count);

        if (inputString.equalsIgnoreCase("Q")) {
            System.out.println("Du svarade på totalt " + word + " glosor och hade " + result + " rätt. Välkommen åter!");

            System.exit(0);

        }

        count = 0;
    }
}

}}

【问题讨论】:

  • 能否请您粘贴您的 eng 声明在 if 条件下使用,如 eng[i]
  • 您应该发布更多代码,因为查看 for 循环我不明白为什么在评估“housa”时您不会计数为 4。我还建议您注意空格(也许 trim() 用户输入)

标签: java char comparison


【解决方案1】:

我尝试使用您的这个代码片段,我得到了正确的输出。 这是我尝试过的

String inputString = "housr";
        String eng = "house";
        int count = 0;
        for(int j=0; j < inputString.length(); j++) {
            if(inputString.charAt(j) == eng.charAt(j)){
            ++count;
           }}
        System.out.println(count);

我的输出为 4

您在尝试什么,请同时粘贴您的逻辑和数据

【讨论】:

  • 我不知道我做错了什么,但是当我对第一个“If 语句”进行 javadoc 处理时,计数是正确的,housa 得到 count = 4。对于输出消息中的瑞典语感到抱歉。跨度>
【解决方案2】:

问题在于你的 if 条件

if (inputString.equalsIgnoreCase(eng[i]))

它检查等于条件,如果您的输入字符串和 eng[i] 都相等,那么只有您的代码执行,在您的情况下,您在 housq 中的输入并且您永远不会在 eng 数组中找到该单词它跳过 for 循环,count 将是您的初始化值,即 0

是否有任何特定原因您使用 if 条件

在这一行

if (inputString.charAt(j) == eng[i].charAt(j))

如果您的输入字符串大小和 eng[i] 字符串大小不相等,您将得到 StringIndexOutOfBoundsException 异常。

只要对你的代码稍作改动,我就可以得到你想要的输出

Scanner scanner = new Scanner(System.in);
        String inputString = "";
        String[] eng = {"car", "house", "run", "blue", "bake", "jump", "swim", "moon", "road", "kind"};
        String[] swe = {"bil", "hus", "springa", "blå", "baka", "hoppa", "simma", "måne", "väg", "snäll"};
        int result = 0;
        int word = 0;
        int count = 0;
        int low = 2;
        int high = 3;

        for (int i = 0; i < swe.length; i++) {
            System.out.println(swe[i]);
            inputString = scanner.nextLine().trim();
            if (inputString.equalsIgnoreCase(eng[i])) {
                word++;
                result++;
                System.out.println("Korrekt! " + result + " rätt av " + word + " ord.");
            }


            if(inputString.length() == eng[i].length()){

                for (int j = 0; j < inputString.length(); j++) {
                    if (inputString.charAt(j) == eng[i].charAt(j)) {
                        ++count;

                    }
                }
            }
                          if(count >= low){
                        System.out.println("Nästan rätt, korrekt svar är " + eng[i]);
                        word++;
                    }


                    if(count > low && count < high){
                        System.out.println("Nästan rätt, korrekt svar är " + eng[i]);
                        word++;
                    }
            if (count == 0) {
                System.out.println("fel, rätt svar är " + eng[i]);
                word++;
            }
            System.out.println(count);

            if (inputString.equalsIgnoreCase("Q")) {
                System.out.println("Du svarade på totalt " + word + " glosor och hade " + result + " rätt. Välkommen åter!");

                System.exit(0);

            }

            count = 0;
        }
    }

我的输入是 housq

我得到的输出是

fel, rätt svar är car
0
Nästan rätt, korrekt svar är house
4
fel, rätt svar är run
0
fel, rätt svar är blue
0
fel, rätt svar är bake
0
fel, rätt svar är jump
0
fel, rätt svar är swim
0
fel, rätt svar är moon
0
fel, rätt svar är road
0
fel, rätt svar är kind
0

【讨论】:

  • 首先,非常感谢您的宝贵时间和帮助。你的输出现在说的是“错误,正确的答案是......”除了单词 2“房子”,输出正是我所追求的
  • 计划是。输出-> swe[0]。如果 eng[0] 的输入正确 -> “正确!word++ 和结果 ++。如果输入接近但不正确,例如 count = 2,3 或 4 -> “几乎,正确答案是......” word++然后最后一个选择是“错误的”Word++。
【解决方案3】:
public static void spel() {
    Scanner scanner = new Scanner(System.in);
    String inputString = "";
    String[] eng = {"car", "house", "run", "blue", "bake", "jump", "swim", "moon", "road", "kind"};
    String[] swe = {"bil", "hus", "springa", "blå", "baka", "hoppa", "simma", "måne", "väg", "snäll"};
    int result = 0;
    int word = 0;
    int count = 0;
    int low = 2;
    int high = 3;

    for (int i = 0; i < swe.length; i++) {
        System.out.println(swe[i]);
        inputString = scanner.nextLine().trim();

        if(inputString.equalsIgnoreCase(eng[i])) {
            word++;
            result++;
            System.out.println("Korrekt! " + result + " rätt av " + word + " ord.");
        }

            for (int j = 0; j < inputString.length(); j++) {
                if (inputString.charAt(j) == eng[i].charAt(j)) {
                    ++count;

                }
            }
                      if(count >= low){
                    System.out.println("Nästan rätt, korrekt svar är " + eng[i]);
                    word++;
                }

        if (count == 0) {
            System.out.println("fel, rätt svar är " + eng[i]);
            word++;
        }
        System.out.println(count);

        if (inputString.equalsIgnoreCase("Q")) {
            System.out.println("Du svarade på totalt " + word + " glosor och hade " + result + " rätt. Välkommen åter!");

            System.exit(0);

        }

        count = 0;

}

}}

有了这个更新的代码。当大多数字符是正确的时,我得到了正确的答案。例如 housa = 4 -> “几乎正确....”

但是当 inputString 和 eng[i].length 的大小不同时,我仍然遇到问题。而且当 inputString 是正确答案时,“正确消息”和“几乎”都会显示..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多