比较具有不同值Java的2个String数组的索引

时间:2013-04-05 20:56:23

标签: java arrays

我有2个并行数组:第一个包含State Names,第二个包含状态的Capitals。

我正在进行一项随机生成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

中找到用户回答的索引来比较两个数组

5 个答案:

答案 0 :(得分: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;
}

或者其他什么。关键是你需要传递一些东西来代表你所展示的状态。

答案 1 :(得分:1)

既然你知道你问过什么状态,你也应该知道它的数组索引。如下所示,两个数组都被声明为类变量。

... 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,但我保留了你的方式。

答案 2 :(得分:0)

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

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

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

您还需要一个答案与数组中的任何大写都不匹配的情况。在代码中实现此操作的一种方法是将索引启动为-1。

int index = -1;

完成for循环检查后,如果index为-1并显示“你的答案不是有效状态”或沿着这些行的某些内容。

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

答案 3 :(得分: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个并行数组,但如果你真正关心的是你提到的数据类型而不是数组本身,那么这是一个更好的实现。

答案 4 :(得分: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;
       }