2016-11-16 79 views
1

我在做一个计算机科学的小项目。我正在编写一个代码来测试一个字符串输入是回文,还是一个前后相同的短语,例如。向后读时,“racecar”=“racecar”。我的“扫描仪”输入没有被记录?什么都没有返回

Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter a palindrome or something...: "); 
     String myLine = keyboard.nextLine(); 
     Palindrome test = new Palindrome(); 
     test.setPaly(myLine); 
     System.out.println(test); 

我的扫描仪进入一个变量“MYLINE”这是我从代码的最后块扔进另一个文件中我等一段代码,通过一个toString称为通过System.out.println(test)

public void setPaly(String setp) 
    { 
     in = setp; 
     boolean b1 = true; 
     int x = 0; 
     while(x<in.length()) 
     { 
      b1 = Character.isLetter(x); 
      if (b1 != false) 
      { 
       paly = paly + in.substring(x, x+1); 
      } 
      x++; 
     } 
    } 

看,'paly'和'in'都是预先初始化的,但那不是我的问题......我的问题来了:'paly'从来没有被实际覆盖。这是为什么?我完全不理解...所以请给我解释一下,而不仅仅是给我一个答案。

我使用codeboard.io做这一点,正因为如此,你可以看看我的全部代码(如果它实际上不是代码在所有这些块的一部分)这里:(https://codeboard.io/projects/33278?view=21.1-2.0): 链接

+1

如果你想让'setPaly()'决定一个输入是否是回文,那么你应该返回一个'boolean'响应,而不是保留'void'。另外,我没有看到'in'正在被初始化。 –

+1

在该循环中及其周围添加一些临时system.out.prints,以便跟踪in,x,paly等的值。这是一种很好且简单的调试技术。它将揭示发生了什么。 –

+2

'Character.isLetter(x);'...你可能想要记住'x' ***真***是......提示:不是一封信。 (至少不适用于短字符串) – Tom

回答

2

这是一个非常简单的问题,甚至可能是一个简单的错字。 你行

b1 = Character.isLetter(x) 

是,我想,试图检查是否在X字符串中的值是一个字符。 然而,它确实不是这样做,原因有几个。


X是int。如果我们检查的文件,我们发现如下:

isLetter(int codePoint) 
Determines if the specified character (Unicode code point) is a letter. 

当您通过isLetter的INT(X,它将从0数到一些合理的低价值),它只是简单地检查,如果这些代码点是字母。第一个Unicode字母是在U + 0041,事实上,如果您在程序中输入的字符超过41个字符,它将开始返回值。

我想你在找什么是

b1 = Character.isLetter(in.charAt(x)); 

这是指数值的简单归并与值的指数,这将是通常预编译抓住一个问题,但不是因为isLetter的额外方法。

因为它永远不会返回,因为它的代码点是一个字母(直到您通过初始控制字符和gubbins),条件从未如此,因此不会修改paly

+0

omg ...你是对的。 –

1

你的主要问题不在于逻辑,而在于你在检查什么。

 // .... 
     while(x<in.length()) 
     { 
      // This is actually checking the number stored in x 
      // a number is never a letter 
      b1 = Character.isLetter(x); 
      // ....   
     } 

你应该问在SETP炭和检查值,而不是 尝试做

b1 = Character.isLetter(setp.charAt(x)); 
0

我的代码第二主体(即我贴)是源我的位置问题。我一直在试图引用int x,但实际上我的意思是做一些类似in.charAt(x)的操作,它会引用输入中x的位置中的字符,它被设置为相等。

+0

现在我觉得很愚蠢,它很简单'(-___-)' –