java空指针异常字符串生成器
我试图在StringBuilder中使用setCharAt方法,但得到一个空指针异常。是否有一种方法可以将值添加到我创建的StringBuilder数组中,以避免出现这些错误
从研究中,我找到了答案。append()方法,但我甚至不确定它是如何工作的
import java.util.*; // Allows for the input of a scanner method.
import java.io.*; // Allows for the inputting and outputting of a data file.
import java.lang.*; // Allows for the use of String Methods.
//////////////////////////////////////////////////////////////////////////////////////
public class TESTY
{
static Scanner testanswers;
static PrintWriter testresults;
public static void main(String[] args) throws IOException
{
testanswers = new Scanner(new FileReader("TestInput.dat"));
testresults = new PrintWriter("TestOutput.dat");
String StudentID;
String answers;
// Reads first two lines first to know how many records there are.
String answerKey = testanswers.nextLine();
int count = Integer.parseInt(testanswers.nextLine());
// Allocate the array for the size needed.
String[][] answerArray = new String[count][];
for (int i = 0; i < count; i++)
{
String line = testanswers.nextLine();
answerArray[i] = line.split(" ", 2);
}
for(int row = 0; row < answerArray.length; row++)
{
for(int col = 0; col < answerArray[row].length; col++)
{
System.out.print(answerArray[row][col] + " ");
}
System.out.println();
}
gradeData(answerArray, answerKey);
testanswers.close();
testresults.close();
}
///////////////////////////////////////////////////////////
//Method: gradeData
//Description: This method will grade testanswers showing
//what was missed, skipped, letter grade, and percentage.
///////////////////////////////////////////////////////////
public static double gradeData(String[][] answerArray, String answerKey)
{
String key = answerKey;
double Points = 0;
StringBuilder[] wrongAnswers = new StringBuilder[5];
String studAnswers;
for(int rowIndex = 0; rowIndex < answerArray.length; rowIndex++) /// Counting rows
{
studAnswers = answerArray[rowIndex][1].replace(" ", "S"); ///Counts rows, Col stay static index 1
for(int charIndex = 0; charIndex < studAnswers.length(); charIndex++)
{
if(studAnswers.charAt(charIndex) == key.charAt(charIndex))
{
Points += 2;
}
else if(studAnswers.charAt(charIndex) == 'S')
{
Points --;
}
else if(studAnswers.charAt(charIndex) != key.charAt(charIndex))
{
for(int i = 0; i < wrongAnswers.length; i++)
{
wrongAnswers[i].setCharAt(charIndex, 'X');
}
Points -= 2;
}
}
System.out.println(Points);
}
return Points;
}
}
错误发生在第91行:
wrongAnswers[i].setCharAt(charIndex, 'X');
# 1 楼答案
StringBuilder[] wrongAnswers = new StringBuilder[5];
不创建5个空StringBuilder,但创建5个空StringBuilder
你需要打个电话
wrongAnswers[i] = new StringBuilder()
以初始化5个数组成员
# 2 楼答案
您已经声明了一个
StringBuilder
数组,但尚未初始化任何插槽,因此它们仍然是null
初始化它们:
此外,在这里使用
setCharAt
不会起作用,因为最初,StringBuilder
中没有任何内容。根据需要,您可能只需要调用append
,或者最初可能需要一个充满空格的字符串,以便将特定字符设置为'X'
# 3 楼答案
你的问题是
不创建5
StringBuilder
对象。它仅创建具有5个空StringBuilder
引用的数组。您需要使用一行单独创建每个StringBuilder
,如在
i
上的循环内