2015-12-30 67 views
0

程序应该做什么:首字母查询相似

  • 程序是看两个词具有相同的首个字母。

我想知道是否有人可以帮助调试这个程序。

我认为我做的一切都正确,但是当我尝试运行它时,程序即将出现错误。

我不明白什么是错的。也许我在底部的印刷课,但除此之外,我没有看到任何错误。

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

为什么你不帮我们帮你添加你说的错误的文本? – usr2564301

+0

异常在线程 “主” 显示java.lang.NullPointerException \t在StringFirstLetterCheck.toString(StringFirstLetterCheck.java:41) \t在java.lang.String.valueOf(未知来源) \t在java.io.PrintStream.print(未知来源) \t at StringFirstLetterCheck.main(StringFirstLetterCheck.java:58) –

+0

我刚刚看到一个错误,它不能解决其他问题,但如果应该说“确实与第一个字母相同” –

回答

2

您的StringFirstLetterCheck对象的构造函数缺少用于设置wordOnewordTwo实例变量的参数。相反,它应该是...

StringFirstLetterCheck test = new StringFirstLetterCheck (a,b); 
1

嘛,你使用默认构造函数创建对象..

StringFirstLetterCheck test = new StringFirstLetterCheck(); 

然后尝试打印出来的对象,它会自动调用toString方法。此方法不验证字段,所以它会抛出您的NullPointerException。解决这个问题的方法是使用正确的构造函数并传入正确的值。

StringFirstLetterCheck test = new StringFirstLetterCheck (a, b); 

其他注意事项

由于Jaskaranbir已经指出的那样,你的if语句语法不正确。我会走得更远,并说你可以简单地返回布尔表达式。

return wordOne.charAt(0) == wordTwo.charAt(0); 

此外,您已经有了一个方法来检查,如果匹配的话,那么你可以记得的方法,而不是在toString方法复制的代码。

1

你应该调用正确的构造函数如下:

StringFirstLetterCheck测试=新StringFirstLetterCheck(A,B);

此外,:-)

else if (wordOne.charAt(0)== wordTwo.charAt(0)) 
     return wordOne + " **have same** first letter as " + wordTwo + "\n"; 
0

更多的事情是错误的验证码

  1. checkFirstLetter有一个错字的方法。在if语句的末尾有一个分号 ,这意味着忽略if并且 方法总是返回true。
  2. 方法checkFirstLettersetWords从不使用,它们应该被删除。