我的“扫描仪”输入没有录制?什么都不返回

时间:2016-11-16 04:00:14

标签: java

我正在为计算机科学做一个小项目。我正在制作一个代码来测试字符串输入是一个回文,还是一个向前和向后相同的短语,例如。当向后看时,“赛车”=“赛车”。

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',我把它放在另一个文件中的另一段代码中,由最后一段代码中的System.out.println(test)调用toString:

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

3 个答案:

答案 0 :(得分: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个字符的sting,它将开始返回值。

我想你正在寻找的是

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

这是索引值与索引值的简单混合,这是通常捕获预编译的问题,但不是因为isLetter的额外方法。

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

答案 1 :(得分:1)

你的主要问题不是逻辑,而是你正在检查的内容。

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

您应该在setp中询问char并检查该值 尝试做

$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();
$result=$query->result_array();

答案 2 :(得分:0)

我的第二个代码(我发布的)是我的问题来源的位置。我一直试图引用int x但事实上我的意思是做in.charAt(x)之类的事情,它会引用输入中x的位置中的字符,该字符被设置为相等。