Вот мои требования:

Создайте (жестко запрограммированные) 50 штатов и их столицы, используя двухмерный массив.

В диалоговом окне: попросите пользователя ввести штат или город.

Если государство введено, найдите его столицу. Войдя в город, найдите его состояние.

Если нет, то выдается сообщение об ошибке.

Это должно быть в цикле, пока пользователь не перестанет играть.

Я действительно не знаю, с чего начать, все, что я сделал до сих пор, это создал массив, я действительно не понимаю, как искать в массиве и выплевывать соответствующее состояние / капитал.

Любая помощь будет принята с благодарностью.

Вот код, который я написал до сих пор.

import java.util.Scanner;

public class GuessStates {
    public static void main(String[] args){

          java.util.Scanner input = new java.util.Scanner(System.in);

     String[][] statesAndCapitols = {
        {"Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"},
        {"Montgomery","Juneau","Phoenix","Little Rock","Sacramento","Denver","Hartford","Dover","Tallahassee","Atlanta","Honolulu","Boise","Springfield","Indianapolis","Des Moines","Topeka","Frankfort","Baton Rouge","Augusta","Annapolis","Boston","Lansing","St. Paul","Jackson","Jefferson City","Helena","Lincoln","Carson City","Concord","Trenton","Santa Fe","Albany","Raleigh","Bismarck","Columbus","Oklahoma City","Salem","Harrisburg","Providence","Columbia","Pierre","Nashville","Austin","Salt Lake City","Montpelier","Richmond","Olympia","Charleston","Madison","Cheyenne"}};

            System.out.println("Please enter a State or a capitol city.");
                String userInput = input.nextLine();



        }
    }

Спасибо еще раз!

-1
ryan5892 3 Апр 2014 в 20:52
1
Я действительно начинаю с чтения некоторых основных руководств по Java по механизмам циклов, как намек на то, что цикл do...while, вероятно, был бы самым простым вариантом ввода. docs.oracle.com/javase/tutorial/java/nutsandbolts/while. html и цикл for для алгоритма поиска docs.oracle .com/javase/tutorial/java/nutsandbolts/for.html
 – 
LordSquall
3 Апр 2014 в 20:56
Я все понимаю на этих страницах, понимаю, как искать в числовом массиве, но не знаю, с чего начать со строк.
 – 
ryan5892
3 Апр 2014 в 21:03
О, хорошо, лучше всего будет зациклить весь массив и на каждом проходе проверять как штат, так и столицу, используя функцию String.equals. Помните, что, поскольку строки являются сложными объектами, «==» не всегда правильно. Внутри цикла, если вы найдете состояние, напечатайте заглавную букву, если вы найдете заглавную букву, напечатайте состояние. Надеюсь, это поможет. Обратите внимание, что поиск массива одинаков независимо от типа массива.
 – 
LordSquall
3 Апр 2014 в 21:07
Спасибо, я посмотрю, что я могу придумать.
 – 
ryan5892
3 Апр 2014 в 21:09
Круто, дайте мне знать, как у вас дела, если у вас есть проблемы с кодовым сообщением, и я посмотрю
 – 
LordSquall
3 Апр 2014 в 21:10

2 ответа

Лучший ответ

Попробуйте выполнить поиск в массиве с помощью цикла for.

Используя цикл for, он отслеживает и обновляет вашу текущую позицию обхода массива.

Как только вы найдете правильное состояние или заглавную букву (проверив, есть ли userInput.equalsIgnoreCase (StatesAndCapitols [x] [y]), затем выберите текущую позицию, в которой вы находитесь, и получите необходимую информацию.

И.Е.

for(int x = 0; x < 2; ++x) //loop through states the first time, capitols the second
  for(int y = 0; y < 50; ++y) //always 50, unless new states get added (obviously not a problem in this example, but useful to think about in future problems - YOUR DATA WILL ALMOST ALWAYS CHANGE.
   if(userInput.equalsIgnoreCase(statesAndCapitols[x][y])
      System.out.println(statesAndCapitols[x == 1 ? 0 : 1][y]);

В массиве я сделал x == 1? 0: 1. Это тернарный оператор, он означает, что если x равно 1, используйте значение 0, в противном случае используйте значение 1.

Это один из способов решить эту проблему.

Другой способ - создать свой собственный класс / тип данных для городов и штатов, при этом вам не нужно поддерживать синхронизацию массивов, то есть вам не нужно обновлять 2 элемента для одного. изменить (например, добавить еще одну комбинацию города / штата).

Надеюсь это немного поможет! :)

0
Steve Sarcinella 3 Апр 2014 в 21:11
Отлично. Я не могу поверить, что это было так просто, я слишком много думал об этом. Благодарность!
 – 
ryan5892
3 Апр 2014 в 21:22
String entered_state=input.nextLine();
for(int i=0;i<50;i++){
    if(statesAndCapitols[0][i].equals(entered_state)){
        String searched_city=statesAndCapitols[1][i];
        //print the city name
        break;
        }
}
if(i==50) 
//print error

То же самое для поиска состояния из введенного города.

0
Sumedh 3 Апр 2014 в 21:19
1
Способ инициализации исходного массива (который отличается от того, как это сделало бы большинство людей), у вас есть индексы 2-D массива в неправильном порядке - должны быть statesAndCapitols[0][i] и statesAndCapitols[1][i].
 – 
ajb
3 Апр 2014 в 21:15
Так что я должен был сделать 50 строк и 2 столбца вместо 50 столбцов и 2 строк? это то, что ты имеешь в виду?
 – 
ryan5892
3 Апр 2014 в 21:24
Да, это общая идея. В вашем коде вы создаете два набора по 50 элементов в каждом, связанных друг с другом. В противном случае вы создаете 50 наборов из пары штатов и городов.
 – 
Sumedh
3 Апр 2014 в 21:33
Лучшим способом было бы создать одномерный массив, в котором каждый элемент представляет собой объект, содержащий как имя штата, так и столицу, вместо двумерного массива. Если это для класса, возможно, вы еще не научились это делать.
 – 
ajb
4 Апр 2014 в 00:35
Это должен был быть двумерный массив, но да, я знаю, что так будет проще, спасибо.
 – 
ryan5892
1 Май 2014 в 06:49