[英]null pointer exception string builder
我正在嘗試在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');
StringBuilder[] wrongAnswers = new StringBuilder[5];
不會創建5個空的StringBuilders,而是5個null的StringBuilders。
您需要撥打類似
wrongAnswers[i] = new StringBuilder()
為了初始化您的5個數組成員。
您已經聲明了StringBuilder
的數組,但是尚未初始化任何插槽,因此它們仍然為null
。
初始化它們:
StringBuilder[] wrongAnswers = new StringBuilder[5];
for (int i = 0; i < wrongAnswers.length; i++)
{
wrongAnswers[i] = new StringBuilder();
}
另外,使用setCharAt
在這里不起作用,因為最初, StringBuilder
沒有任何內容。 根據您要在此處執行的操作,您可能只需要調用append
,或者您可能最初想要一個包含空格的字符串,以便可以將特定字符設置為'X'
。
你的問題是
StringBuilder[] wrongAnswers = new StringBuilder[5];
不會創建5個StringBuilder
對象。 它僅創建具有5個null StringBuilder
引用的數組。 您需要使用如下一行分別創建每個StringBuilder
:
wrongAnswers[i] = new StringBuilder();
在i
的循環中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.