我正在为计算机科学做一个小项目。我正在制作一个代码来测试字符串输入是一个回文,还是一个向前和向后相同的短语,例如。当向后看时,“赛车”=“赛车”。
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)
答案 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的位置中的字符,该字符被设置为相等。