Возникают проблемы при сравнении двух массивов - PullRequest
0 голосов
/ 08 ноября 2018

Программа должна переводить слово с американской на британскую версию. Он работает только для первого слова, но не работает для других слов, потому что вместо этого он дает оператор 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 голосов
/ 08 ноября 2018

Я полагаю, у вас здесь происходит пара вещей.

Во-первых, я думаю, что вы не хотите делать свои операторы else до тех пор, пока после вы не пройдете цикл. Как написано в данный момент, он прекратит работу, как только ваш первый оператор 'if' потерпит неудачу из-за характера вашего вызова if / else и вызова System.exit (0).

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);

Поскольку значения отображаются с помощью индекса, вы можете получить прямой доступ к тому, что хотите перевести, без второго цикла, что делает вашу программу быстрее и менее сложной!

0 голосов
/ 08 ноября 2018

Поскольку вы связываете свои американские слова со своими французскими словами, вам нужно только зациклить массивы один раз, и если слово равно вашему американскому слову, вы хотите напечатать строку с одинаковым индексом как в французском, так и в американском массиве. .

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.");
0 голосов
/ 08 ноября 2018

Поскольку 2 массива содержат перевод слов в одном и том же индексе, вам не нужно перебирать 2-ю таблицу. Просто найдите индекс слова в 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 цикл останавливается, как только слово найдено.

0 голосов
/ 08 ноября 2018

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

    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

}
...