比较两个数组时遇到问题

时间:2018-11-08 18:13:50

标签: java arrays debugging equals compareto

该程序应该将单词从美式翻译成英式。它仅适用于第一个单词,而不适用于其他单词,因为它改为提供else语句。

我的代码:

import java.util.Scanner;

public class BritishTranslator {

    public static void main(String[]args) {
        Scanner input = new Scanner(System.in);
        String word;

        String [] america = new String[8];
        String [] british = new String[8];

        america[0] = "attic";
        america[1] = "business suit";
        america[2] = "elevator";
        america[3] = "frenc fries";
        america[4] = "ice cream";
        america[5] = "sneakers";
        america[6] = "truck";
        america[7] = "zero";

        british[0] = "loft";
        british[1] = "lounge suit";
        british[2] = "lift";
        british[3] = "chips";
        british[4] = "ice";
        british[5] = "plimsolls";
        british[6] = "lorry";
        british[7] = "nough";

        System.out.println("Please enter an American word: ");
        word = input.nextLine();

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

        {
            for(int j = 0; j < british.length; j++)

            {
                if (word.equals(america[i])) 

                {
                    System.out.println(america[i] + " in british is: " + british[j]);
                    System.exit(0);
                }

                else

                {
                    System.out.println("Word not found in the dictionary.");
                    System.exit(0);
                }
            }
        }
    }
}

我需要帮助来学习如何调试此代码。

4 个答案:

答案 0 :(得分:1)

如果您发现单词看在英国数组中的相同索引上,则只需要遍历America数组即可。 和其他的循环

    for (int i = 0; i < america.length; i++){
            if (word.equals(america[i])) {
                System.out.println(america[i] + " in british is: " + british[i]);
                System.exit(0);
            }
    }
    System.out.println("Word not found in the dictionary.");
    System.exit(0); // you dont need this as well

}

答案 1 :(得分:1)

由于2个数组在同一索引中包含单词翻译,因此您不必遍历第二个表。只需在第一个表中找到单词的索引,然后使用该索引在第二个表中获取翻译。还可以使用boolean标志found在循环后检查是否找到该词:

System.out.println("Please enter an American word: ");
word = input.nextLine();

boolean found = false;
for (int i = 0; i < america.length; i++) {
    found = word.equals(america[i]);
    if (found) {
        System.out.println(america[i] + " in british is: " + british[i]);
        break;
    }
}
if (!found)
    System.out.println("Word not found in the dictionary.");

使用break,一旦找到单词,循环就停止。

答案 2 :(得分:0)

由于您将美式单词与法式单词配对,因此只需要循环一次数组,如果该单词等于您的美式单词,那么您想在法式数组和美式数组中的相同索引处打印字符串

for (int i = 0; i < america.length && i < british.length; i++)
{
    if (word.equals(america[i])) 
    {
        System.out.println(america[i] + " in british is: " + british[i]);
        System.exit(0);
    }
}

System.out.println("Word not found in the dictionary.");

答案 3 :(得分:0)

我相信您在这里有几件事。

首先,我认为您不希望在之后之后执行else语句。正如当前所写的那样,由于您的if / else和System.exit(0)调用的性质,第一个“ if”语句失败后它将终止。

System.out.println("Please enter an American word: ");
word = input.nextLine();

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

{
    for(int j = 0; j < british.length; j++)

    {
        if (word.equals(america[i])) 

        {
            System.out.println(america[i] + " in british is: " + british[j]);
            System.exit(0);
         } 
    }
}
System.out.println("Word not found in the dictionary.");
System.exit(0);

但是,实际上您不需要第二个循环,因为您具有遍历第一个循环时发现的索引,因此可以进一步简化答案。

System.out.println("Please enter an American word: ");
word = input.nextLine();

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

{
        if (word.equals(america[i])) 

        {
            System.out.println(america[i] + " in british is: " + british[i]);
            System.exit(0);
         } 
}
System.out.println("Word not found in the dictionary.");
System.exit(0);

由于值是通过索引映射的,因此您无需第二个循环就可以直接访问要翻译的内容,从而使程序更快,更简单!