为什么我在Java中得到ArrayStoreException?

时间:2014-03-21 12:52:48

标签: java

我的问题是,为什么我在线程" main"中得到异常? java.lang.ArrayStoreException:

  

at java.lang.System.arraycopy(native method)   在java.util.ArrayList.toArray(未知来源)   在Main.main(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);

}
}

我的bdd.txt文件如下:

1111
2222
3333
4444
5555
6666
7777
8888
9999

1 个答案:

答案 0 :(得分:6)

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

例如:

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

或者构建List<String>而不是使用数组。

或者根本不打算将所有内容转换为字符串集合 - 而只是迭代pins并进行测试。

如JB Nizet所述,you should also use equals rather than == when comparing strings