我的程序完全按照我希望的方式运行,但我在控制台中收到一条错误消息:
线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:6,大小:6
java.util.ist.range检查(ArrayList.java:653)
java.util.ist.get(ArrayList.java:429)
在Kevinmath4.check答案(Kevinmath4.java:152)
在Kevinmath4。main(Kevinmath4.java:39)
这是代码:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Kevinmath4 {
static File filename = new File("homework.txt");
static ArrayList<Object> aList = new ArrayList<Object>();
static String homework = "";
static File filename2 = new File("homework2.txt");
static ArrayList<Object> aList2 = new ArrayList<Object>();
static String homework2 = "";
static String answerPass = "";
static ArrayList<Object> aList3 = new ArrayList<Object>();
static final int TOTAL_QUESTIONS = 5;
static String date;
public static void main(String[] args) throws FileNotFoundException {
String initialInput = JOptionPane.showInputDialog(null,
"Enter Add answers / Check answers to continue");
switch (initialInput) {
case "Add answers":
answers("excalibur117", aList, filename);
break;
// Need to store the array permanently
case "Check answers": // Need to make it so it stores array of
// Kevin's answers permanently
clearFile(filename2);
answers("Kevin", aList2, filename2);
readAnswers(filename, aList3);
checkAnswers(aList3, aList2);
break;
default:
JOptionPane.showMessageDialog(null, "Please enter a valid option.");
break;
}
clearFile(filename2);
// exit the program
JOptionPane.showMessageDialog(null,
"Thanks for using this program. Cheers!");
}
public static void answers(String pass, ArrayList<Object> list, File f) {
answerPass = JOptionPane.showInputDialog(null,
"Please enter the password");
// validate user
while (!answerPass.equals(pass)) {
JOptionPane.showMessageDialog(null,
"Incorrect Password. Please try again.");
answerPass = JOptionPane.showInputDialog(null,
"Please enter the password.");
}
// add answers
String final1 = "";
do {
list.clear();
// validate the date of the answers
date = JOptionPane.showInputDialog(null,
"Enter the date of the desired" + " answers (MM/DD/YY)");
// add your answers
enterAnswers(date, list, f);
// verify the answers
final1 = JOptionPane.showInputDialog(null, "Is this correct: "
+ list.get(1) + " " + list.get(2) + " " + list.get(3) + " "
+ list.get(4) + " " + list.get(5) + "? (Yes/No)");
} while (final1.charAt(0) == 'n' || final1.charAt(0) == 'N');
}
public static void enterAnswers(String options, ArrayList<Object> list,
File f) {
do {
boolean valid = false;
list.add(date);
for (int i = 0; i < 5; i++) {
while (!valid) {
homework = JOptionPane
.showInputDialog("Please enter your answer for question "
+ (i + 1));
if (!homework.isEmpty())
valid = true;
}
list.add(homework);
valid = false;
}
writeFile(f, list); // write the answers to a file
break;
} while (!homework.isEmpty());
}
public static void writeFile(File filename, ArrayList<Object> list) {
try {
FileWriter fw = new FileWriter(filename, true);
Writer output = new BufferedWriter(fw);
for (int j = 0; j < list.size(); j++) {
output.write(list.get(j) + "\n");
}
output.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Oops! I cannot create that file.");
}
}
public static void clearFile(File filename) {
try {
FileWriter fw = new FileWriter(filename, false);
Writer output = new BufferedWriter(fw);
output.write("");
output.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Oops! I cannot create that file.");
}
}
public static void checkAnswers(ArrayList<Object> a, ArrayList<Object> b) {
int i = 1; // counter variable
int j = a.indexOf(date);
for (Object obj : a) { // iterate through any list
for (int k = (j + 1); k < (j + 6); k++) {
if (obj.getClass() == String.class) { // find if it's a
// string
if (!a.get(k).equals(b.get(i))) {
JOptionPane.showMessageDialog(null, "#" + (i)
+ " is wrong.");
}
}
if (obj.getClass() == Double.class) { // or a double
if (!a.get(k).equals(b.get(i))) {
JOptionPane.showMessageDialog(null, "#" + (i)
+ " is wrong.");
}
}
if (obj.getClass() == Integer.class) { // or an integer
if (!a.get(k).equals(b.get(i))) {
JOptionPane.showMessageDialog(null, "#" + (i)
+ " is wrong.");
}
}
i++;
}
}
}
public static void readAnswers(File filename, ArrayList<Object> list)
throws FileNotFoundException {
Scanner s = new Scanner(new File("homework.txt"));
while (s.hasNextLine()) {
list.add(s.nextLine());
}
s.close();
}
}
我做错了什么?
一般来说,听起来像“我的代码做了它应该做的,但无论如何我都会得到一个异常”的情况,尤其是在学术工作中,通常意味着您已经迭代了一个循环太多次。这由异常类型加强,ArrayIndexOutOfBoundsException
。
考虑数组{a, b, c}。到目前为止,我确信您知道该数组位置0处的值是'a',位置1包含'b',位置2包含'c'。如果您在Java中尝试访问该数组的位置3,您将得到一个ArrayIndexOutOfBoundsException,因为位置3处没有元素,并且数组没有那么长。
我想在一个肢体上,猜测第152行就是这个:if(!a.get(k)。等于(b.get(i))
我猜当k==6时,会调用a.get(k),但a的长度只有6(这意味着它的最高索引是5)。
我猜(int k=(j 1); k的表达式
然而,我只能猜测,因为坦率地说(并不想粗鲁...只是说...),你的代码一团糟。更好的变量名、注释和更少使用神奇数字会让你走得更远。
希望这有帮助。
问题是这里的for
循环,
for (int k = (j + 1); k < (j + 6); k++) {
当您(盲目地)访问a.get(k)
时,您不知道k
for (int k = (j + 1); k < a.size(); k++) {
文件编制
我用JavaScript开发了一个程序,当每次按下按钮时,图像应该在每次按下时交替——如果它当前是“盒子打开”图像,它应该切换到“盒子关闭”图像。同样,如果它目前处于关闭状态,它应该切换到“打开的盒子”。然而,我面临着一个“非法调用”错误,这如何解决?
我想运行我的程序,但它给我这个错误:异常线程主java.lang.ArrayIndexOutOfBoundsException: 0在Main.main(Main.java: 9) 我一直在寻找解决方案,我唯一找到的是:我的数组怎么了?,这与我遇到的错误/问题不同。
我制作了一个GUI程序,它统计在主文本字段中输入的任何内容的某些元素。如果文本字段为空,则应弹出一条消息,说明用户应在文本字段中输入文本。我做了一个if语句,如果tfMain==null,JOptionPane消息应该会弹出,但由于某些原因它不会弹出。有没有关于为什么它不会弹出的提示? 这是我的代码:
错误消息- , versionCode=1, versionName=1.0, Application ationId=com.vpaliy.loginconcept, testApplication ationId=null, testInstrumentationRunner=android.support.test.runner.AndroidJUnitRunner, testInstrum
问题解决了。请看一下我自己在这个StackOverflow问题中的答案,了解如何。 但是,这是新的(并且正确工作的)代码: 显示器与下面相同。 我试图实现Gauss-Jordan消去法的Scala版本来反转矩阵(注意:可变集合和命令式范例用于简化实现——我试图不使用它们来编写算法,但这几乎是不可能的,因为算法包含嵌套步骤)。 单位矩阵不能很好地转换为反演的结果。换句话说:单位矩阵变换为倒矩阵(这是