为什么我在Java中得到ArrayStoreException?

hac*_*ife 0 java

我的问题是,为什么我在线程"main"java.lang.ArrayStoreException中得到一个Exception:

在Main.main的java.util.ArrayList.toArray(未知来源)的java.lang.System.arraycopy(本机方法)中(Main.java:50)

这是我的代码:

import java.io.*;
import java.util.*;

public class Main {

static public boolean readPinsData(File dataFile, ArrayList<Integer> data) {
   boolean err = false;
   try {
      Scanner scanner = new Scanner(dataFile);
      String line;
      while (scanner.hasNext()) {
         line = scanner.nextLine();
         try {
            data.add(Integer.parseInt(line));
         } catch (NumberFormatException e) {
            e.printStackTrace();
            err = true;
         }
      }
      scanner.close();
   } catch (FileNotFoundException e) {
      e.printStackTrace();
      err = true;
   }

   return err;
}


public static void main(String[] args) {
    Console console = System.console();
    int pinSize = 0;

    do{
    char passwordArray[] = console.readPassword("Enter pin: ");
    pinSize = passwordArray.length;

    if(pinSize != 4){
            System.out.println("Pin must be 4 digits");
        } else {
            System.out.println("Checking...");
        }


    ArrayList<Integer> pins = new ArrayList<Integer>();
   readPinsData(new File("bdd.txt"), pins);
   //System.out.println(pins);
   //System.out.println(passwordArray);

   String[] thePins = pins.toArray(new String[pins.size()]);
   String passEntered = String.valueOf(passwordArray);
   int i = 0;

   for(i = 0 ; i < thePins.length ; i++){
      if(passEntered == thePins[i]){
          System.out.println(":)");
      }else{
          System.out.println(":(");
      }
  }

   }while(pinSize != 4);

}
}
Run Code Online (Sandbox Code Playgroud)

我的bdd.txt文件如下所示:

1111
2222
3333
4444
5555
6666
7777
8888
9999
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

基本上你有一个List<Integer>,你试图将它的内容存储在一个String[].你不能这样做.如果要将每个转换Integer为a String,则需要明确地执行此操作.

例如:

String[] thePins = new String[pins.size()];
for (int i = 0; i < thePins.length; i++) {
    thePins[i] = pins.get(i).toString();
}
Run Code Online (Sandbox Code Playgroud)

或者构建一个List<String>而不是使用数组.

或者根本不打算将所有内容转换为字符串集合 - 而是迭代pins并测试这种方式.

正如JB Nizet所指出的那样,你也应该使用equals而不是==比较字符串.