如何从ArrayList中专门提取元素?

时间:2017-07-24 13:13:37

标签: java arrays arraylist netbeans

我的任务是开发一个程序,提示用户创建自己的问题和答案,这些问题和答案将存储在arrayList中。之后,每当用户键入相同的问题时,程序将自动提取答案。

到目前为止我做了什么:我设法将问题和答案存储到arrayList中,但我不知道如何在用户提出他刚刚创建的问题时触发程序以提取确切的答案。这是我的代码:

import java.util.ArrayList;
import java.util.Scanner;

public class CreateQns {

    public static void main(String[] args) {
        String reply;
        ArrayList qns = new ArrayList();
        ArrayList ans = new ArrayList();
        System.out.println("Type 0 to end.");

        do {
            Scanner input = new Scanner (System.in);
            System.out.println("<==Enter your question here==>");
            System.out.print("You: ");
            reply = input.nextLine();
            if(!reply.equals("0")) {
                qns.add(reply);
                System.out.println("Enter your answer ==>");
                System.out.print("You: ");
                ans.add(input.nextLine());
            }
            else {
                System.out.println("<==End==>");
            }
        }while(!reply.equals("0"));
    }

}

3 个答案:

答案 0 :(得分:2)

您可以使用存储密钥/值的HashMap<String, String> 用户输入一个问题,检查它是否在地图中,如果是,则打印答案,如果没有问答案并存储:

public static void main(String[] args) {
   String reply;
   HashMap<String, String> map = new HashMap<>();
   System.out.println("Type 0 to end.");
   do {
       Scanner input = new Scanner(System.in);
       System.out.println("<==Enter your question here==>");
       System.out.print("You: ");
       reply = input.nextLine();
       if (!reply.equals("0")){

          if (map.containsKey(reply))               // if question has already been stored
               System.out.println(map.get(reply));  // print the answer
          else {

               System.out.println("Enter your answer ==>");
               System.out.print("You: ");
               map.put(reply, input.nextLine());         // add pair question/answer
          }
        }else{
                System.out.println("<==End==>");
        }
   } while (!reply.equals("0"));
}

但要直接回答你的要求,而不是你应该做的map.contains()

int index;
if ((index = qns.indexOf(reply)) >= 0){
    System.out.println(ans.get(index));
}

但这不如Map

那么方便,不那么强大

答案 1 :(得分:1)

请在不使用HashMap的情况下找到代码。

import java.util.ArrayList;
import java.util.Scanner;

public class CreateQns {

    public static void main(String[] args) {
        String reply;
        ArrayList<String> qns = new ArrayList();
        ArrayList<String> ans = new ArrayList();
        System.out.println("Type 0 to end.");

        do {
            Scanner input = new Scanner (System.in);
            System.out.println("<==Enter your question here==>");
            System.out.print("You: ");
            reply = input.nextLine();
            if(!reply.equals("0")) {
                if(qns.contains(reply))
                {
                    System.out.println("your answer is==>"+ans.get(qns.indexOf(reply)));
                }
                else
                {
                    qns.add(reply);
                    System.out.println("Enter your answer ==>");
                    System.out.print("You: ");
                    ans.add(input.nextLine());
                }

            }
            else {
                System.out.println("<==End==>");
            }
        }while(!reply.equals("0"));
    }

}   

答案 2 :(得分:0)

您需要使用Map<String, String>将您要求的问题与用户为其输入的回复相关联。

您的代码应该说:如果问题地图包含用户刚输入的问题,则在地图中打印与问题相关联的值,否则请求用户输入并回答并将问题/答案添加到地图中