该计划应该做什么:
我想知道是否有人可以帮助调试此程序。
我认为我做的一切都正确,但是当我尝试运行程序时,程序会出现错误。
我看不出有什么不对。也许我的印刷课在底部,但除此之外,我没有看到任何错误。
import static java.lang.System.*;
import java.util.Scanner;
public class StringFirstLetterCheck
{
String wordOne, wordTwo;
public StringFirstLetterCheck()
{
}
public StringFirstLetterCheck(String one, String two)
{
wordOne = one;
wordTwo = two;
}
public void setWords(String one, String two)
{
wordOne = one;
wordTwo = two;
}
public boolean checkFirstLetter( )
{
if (wordOne.charAt(0)== wordTwo.charAt(0));
return true;
}
public String toString()
{
if (wordOne.charAt(0)!= wordTwo.charAt(0))
return wordOne + " does not have the same first letter as " + wordTwo + "\n";
else if (wordOne.charAt(0)== wordTwo.charAt(0))
return wordOne + " does not have same first letter as " + wordTwo + "\n";
return ("wrong");
}
public static void main( String args[] )
{
Scanner keyboard = new Scanner(System.in);
out.print("Enter word one :: ");
String a = keyboard.nextLine();
out.print("Enter word two ::");
String b = keyboard.nextLine();
StringFirstLetterCheck test = new StringFirstLetterCheck ();
out.print(test);
错误讯息:
Exception in thread "main" java.lang.NullPointerException
at StringFirstLetterCheck.toString(StringFirstLetterCheck.java:41)
at java.lang.String.valueOf(Unknown Source)
at java.io.PrintStream.print(Unknown Source)
at StringFirstLetterCheck.main(StringFirstLetterCheck.java:58)
答案 0 :(得分:2)
StringFirstLetterCheck
对象的构造函数缺少用于设置wordOne
和wordTwo
实例变量的参数。相反它应该是......
StringFirstLetterCheck test = new StringFirstLetterCheck (a,b);
答案 1 :(得分:1)
好吧,你使用默认构造函数创建对象..
StringFirstLetterCheck test = new StringFirstLetterCheck ();
然后您尝试打印出自动调用toString
方法的对象。此方法不会验证字段,因此它会抛出您的NullPointerException
。解决这个问题的方法是使用正确的构造函数并传入正确的值。
StringFirstLetterCheck test = new StringFirstLetterCheck (a, b);
其他笔记
正如Jaskaranbir指出的那样,你的if语句语法不正确。我会更进一步说你可以简单地返回布尔表达式。
return wordOne.charAt(0) == wordTwo.charAt(0);
此外,您还有一种检查单词是否匹配的方法,因此您可以调用该方法,而不是使用toString
方法复制代码。
答案 2 :(得分:1)
您应该按如下方式调用正确的构造函数:
StringFirstLetterCheck test = new StringFirstLetterCheck(a,b);
另外,:-)
else if (wordOne.charAt(0)== wordTwo.charAt(0))
return wordOne + " **have same** first letter as " + wordTwo + "\n";
答案 3 :(得分:0)
此代码中有更多错误:
checkFirstLetter
有拼写错误。在那里有一个分号
if语句的结尾意味着if被忽略了
方法总是返回true。checkFirstLetter
和
永远不会使用setWords
,应删除它们。