我正在进行以下任务:尝试moveOn或backUp或在非法时评估seesCD会导致突然的System.exit(0),而无需解释。在这种情况下,用户会欣赏跟踪输出。修改这三个方法以调用解释问题的私有方法(使用showMessageDialog),然后终止。
我编写了以下代码(请向下滚动代码):
import java.util.*;
import java.awt.*;
import javax.swing.*;
public class Vic extends Object
{
private static final String NONE = "0";
/////////////////////////////////
private String itsSequence = "";
private int itsPos = 1;
private final int itsID; // assigned by the constructor
private void trace (String action)
{
System.out.println ("Vic# " + itsID + ": " + action
+ itsPos + "; sequence= " + itsSequence);
} //======================
public void backUp()
{
if (itsPos == 1)
error("Could not backUp");
itsPos--;
trace ("backUp to slot ");
} //======================
public void moveOn()
{
if ( ! seesSlot())
error("Could not moveOn");
itsPos++;
trace ("moveOn to slot ");
} //======================
public boolean seesSlot()
{
return itsPos < itsSequence.length();
} //======================
public boolean seesCD()
{
if ( ! seesSlot())
error("Can't see CD, there is no slot");
String s = itsSequence.substring (itsPos, itsPos + 1);
return ! s.equals (NONE);
} //======================
private void error(String message)
{
JOptionPane.showMessageDialog(null, "ERROR: " + message);
System.exit(0);
}
}
编译时收到以下错误消息:
“变量itsID可能尚未初始化”。 这一行突出显示。“公共类Vic扩展对象”
答案 0 :(得分:1)
问题是你有一个final
实例变量(这意味着它必须在构造期间只分配一次值),但你没有一个构造函数实际将它分配到任何地方。
有一条评论说明在该字段上由构造函数分配,但是没有明确的构造函数。也许您应该编写一个,或者在将此代码转换为赋值的过程中将其删除。
答案 1 :(得分:-1)
itsId未设置在任何地方,这解释了您的错误。
但总的来说,这种类型的问题是通过try和catch块以及抛出的错误来解决的。我相信你即将了解这些。