运行Java代码时遇到一些错误。它编译得很好,但我得到了异常的运行时错误。这是代码:
import java.io.*;
class display {
private int charNumber;
private char[] currentArray;
public display() {
charNumber = 0;
}
public void dispText(String text, long speed, long wait) {
while(currentArray[charNumber] != '~') {
currentArray = text.toCharArray();
System.out.print(currentArray[charNumber]);
try {
Thread.sleep(speed);
} catch (NullPointerException e) {
System.out.println("Error in the Thread process:\n" + e);
} catch (InterruptedException e) {
System.out.println("Error in the Thread process:\n" + e);
}
charNumber++;
}
charNumber = 0;
try {
Thread.sleep(wait);
} catch (NullPointerException e) {
System.out.println("Error in the Thread process:\n" + e);
} catch (InterruptedException e) {
System.out.println("Error in the Thread process:\n" + e);
}
}
public void resetCharNumber() {
charNumber = 0;
}
}
class Main {
public static void main (String[] args) throws Exception {
//Make sure to include a '~' at the end of every String.
String start = "Hey, is this thing on?~";
String hello = "Hello, World!~";
display d = new display();
d.dispText(start, 200, 2000);
d.dispText(hello, 200, 2000);
System.out.println("\nDone!");
}
}
void dispText
需要一个字符串来显示带有System.out.print
的文本,这是一个很长的速度来确定每次显示一个字符的时间(如打字机)和漫长的等待,以确定如何在执行下一个进程之前经过了很多时间。 dispText
获取String文本,将其转换为带text.toCharArray();
的char数组,然后进入while循环,每次运行显示一个字符,然后等待速度指定的时间,然后继续到下一个角色。它会这样做,直到它到达最后一个字符('〜'),该字符作为字符串中最后一个字符包含在文本中。然后,它移动到下一行。然后在main中,创建显示类的istance,名为'd',d执行dispText两次。
这是我运行时遇到的运行时错误:
运行时错误:线程“main”中的异常java.lang.NullPointerException
at display.dispText(Main.java:14)
在Main.main(Main.java:48)
答案 0 :(得分:4)
你宣布你的数组如下: -
private char[] currentArray;
但你从来没有初始化它。你应该在构造函数中初始化它,如: -
currentArray = new char[size];
OR,如评论中所述,您正在初始化阵列,但位置错误。
你的while循环中有这段代码: -
while(currentArray[charNumber] != '~') {
currentArray = text.toCharArray();
将第一个语句移到while循环之外: -
currentArray = text.toCharArray(); // Move this outside the while
while(currentArray[charNumber] != '~') {
然后你不需要在构造函数中初始化数组。
作为旁注,请遵循Java命名约定。类名应以大写字母开头,之后应遵循CamelCasing。
答案 1 :(得分:1)
在使用char数组之前,你无法初始化它,而是从循环内的字符串中提取字符。 (并且你的循环索引初始化不正确)。
变化:
public void dispText(String text, long speed, long wait) {
while(currentArray[charNumber] != '~') {
currentArray = text.toCharArray();
...
到
public void dispText(String text, long speed, long wait) {
currentArray = text.toCharArray();
for(charNumber=0; currentArray[charNumber] != '~'; charNumber++) {
...
并从循环中删除charNumber增量。
答案 2 :(得分:0)
在尝试使用currentArray之前,尚未初始化它。
while(currentArray...