0

我有 2 个并行数组:第一个包含州名,第二个包含州首府。

我正在做一个随机生成的测验,State然后要求用户输入该州的首都。一旦收到输入,我想调用一个方法来检查输入的资本指数是否与它所在的州的指数相同。

即:stateArray[0] = "New York"capitalArray[0] = "Albany"

检查答案方法

 public static void checkAnswer(String[]stateArray, String capitalArray, String answer)
 {
    int index;
    for (int i = 0; i < capitalArray.length; i++){

        if(capitalArray[i].equalsIgnoreCase(answer)){
            index = i;
        }
    }

    if(capitalArray[index] == stateArray[index]) 
        {
            System.out.println("correct");
        }
        else
        {
            System.out.println("incorrect");
        }
    }

我知道第二个if说法是错误的。如何使用在 中找到用户答案的​​索引来比较两个数组capitalArray

4

5 回答 5

1
boolean checkAnswer(String[] stateArray, String[] capitalArray, String displayedState, String answer) {
    for (int i = 0; i < stateArray.length; i++) {
        if (stateArray[i].equals(displayedState) && capitalArray[i].equals(answer)) {
            return true;
        }
    }
    return false;
}

或者其他的东西。关键是你需要传入一些东西来代表你显示的状态。

于 2013-04-05T21:16:16.950 回答
0

您需要跟踪保存向用户显示的状态的索引。例如,现在编写代码的方式使用户能够通过给出错误答案来获得正确答案。以这个例子为解释:

string[] stateArray = {"New York", "California"};
string[] capitalArray = {"Albany", "Sacramento"};

如果您将“纽约”显示为问题并且用户恰好回答“萨克拉门托”,那么您的代码将显示正确。

您还需要一种情况,其中答案与数组中的任何大写字母都不匹配。在您的代码中执行此操作的一种方法是将索引初始化为 -1。

int index = -1;

完成 for 循环后,检查 index 是否为 -1 并显示“您的答案不是有效状态”或类似的内容。

也许使用 HashMap,我对 Java 并不完全熟悉,它似乎类似于 Python 中的字典。字典对象有很好的性能。

于 2013-04-05T21:22:17.190 回答
0

试试这个函数它返回数组: -

public static String[] numSame (String[] list1, String[] list2) 
     {  
          int same = 0;  
          for (int i = 0; i <= list1.length-1; i++) 
          {  
             for(int j = 0; j <= list2.length-1; j++) 
             {  
                if (list1[i].equals(list2[j])) 
                {  
                    same++;  
                    break;  
                }  
             }  
          }  

          String [] array=new String[same];
          int p=0;
          for (int i = 0; i <= list1.length-1; i++) 
          {  
             for(int j = 0; j <= list2.length-1; j++) 
             {  
                if (list1[i].equals(list2[j])) 
                {  
                    array[p]=  list1[i]+"";
                    System.out.println("array[p] => "+array[p]);
                    p++;
                    break;  
                }  
             }  
          } 
          return array;
       }  
于 2013-08-28T06:00:21.560 回答
0

Java 中的另一种实现是使用 Map 而不是两个数组。

Map<String,String> stateCapitals = new HashMap<String,String>();
stateCaptitals.put("New York", "Albany");

然后你可以检查地图

public voic checkAnswer(String chosenState, String chosenCapital) {
  if (stateCapitals.get(chosenState).equals(chosenCapital) {
     System.out.println("you are correct!");
  }
}

这不适用于 2 个并行数组,但如果您真正关心的是您提到的数据类型,而不是数组本身,那么它是一个更好的实现。

于 2013-04-05T21:49:35.427 回答
0

既然你知道你问的是什么状态,你也应该知道它的数组索引。正如您在下面看到的,两个数组都被声明为类变量。

... class Quiz {

private String[] states = new String[50];
private String[] capitals = new String[50];

... method to fill both arrays with the correct data

 public static void checkAnswer(int question, String answer)
 {


    if(capitalArray[question].equalsIgnoreCase(answer)){
        {
            System.out.println("correct");
        }
        else
        {
            System.out.println("incorrect");
        }
   }
}

最好将checkAnswer方法的返回类型设置为Boolean,但我把它留给了你。

于 2013-04-05T21:28:43.123 回答