Java 比较两个具有不同值的字符串数组的索引

Java 比较两个具有不同值的字符串数组的索引,java,arrays,Java,Arrays,我有两个平行数组:第一个包含州名,第二个是州的大写字母 我正在做一个测验,随机生成一个州,然后要求用户输入州首府。一旦收到输入,我想调用一个方法来检查输入的资本的索引是否与它所处的状态的索引相同 例如:stateArray[0]=“纽约”和capitalArray[0]=“奥尔巴尼” 核对答案法 public static void checkAnswer(String[]stateArray, String capitalArray, String answer) { int in

我有两个平行数组:第一个包含州名,第二个是州的大写字母

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

例如:
stateArray[0]=“纽约”
capitalArray[0]=“奥尔巴尼”

核对答案法

 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");
        }
    }
publicstaticvoidcheckanswer(String[]stateArray,stringcapitalarray,stringanswer)
{
整数指数;
for(int i=0;i
我知道第二个
if
语句是错误的。如何使用在
capitalArray
中找到用户答案的索引来比较这两个数组?

布尔checkAnswer(String[]stateArray,String[]capitalArray,String displayedState,String answer){
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;
}
for(int i=0;i

或者别的什么。关键是您需要传入一些表示所显示状态的内容。

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

string[] stateArray = {"New York", "California"};
string[] capitalArray = {"Albany", "Sacramento"};
如果您将“纽约”显示为问题,而用户恰好回答了“萨克拉门托”,那么您的代码将显示正确

您还需要一个案例,其中答案与数组中的任何大写字母都不匹配。在代码中实现这一点的一种方法是将索引初始化为-1

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


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

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

... 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
,但我不这样做。

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

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

这对2个并行阵列不起作用,但如果您真正关心的是您提到的数据类型,而不是阵列本身,则这是一个更好的实现。

尝试使用此函数返回阵列:-

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;
       }  
公共静态字符串[]numname(字符串[]列表1,字符串[]列表2)
{  
int-same=0;

对于(int i=0;i看起来您需要将给出的答案索引与显示的状态索引进行比较,并处理答案与capitalArray中的任何字符串不匹配的情况。您似乎没有任何东西来表示正确的状态,因此无法找到适当的索引来查找请向我们显示e代码,用于询问问题并捕获答案。您需要在“询问”问题之前存储该问题,或者最好存储该问题的索引。然后,如果(capitalArray[questionIndex].equals(answer))返回true,则可以使用该代码检查答案
。注意,第二个参数应为
String[]
而不是
String
,但我想这是您示例中的一个输入错误。
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;
       }