我的问题是,为什么我在线程" 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
答案 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。