Java 困惑这个回文测试是如何工作的
这段代码用于测试简单的回文,但我不清楚它是如何工作的。 我对while循环条件感到困惑,检查Java 困惑这个回文测试是如何工作的,java,palindrome,Java,Palindrome,这段代码用于测试简单的回文,但我不清楚它是如何工作的。 我对while循环条件感到困惑,检查if(left左){ 左++; 对--; } System.out.println(); if(左左索引(您已通过字符串的“中间”)时,while循环将结束 如果(leftleft相同,并且字符串是回文(一种情况),则左字符不等于右字符 我希望这会有所帮助。回文测试只有在字符串都是大写或小写时才有效 当左字符不等于右字符,或者右索引>左索引(您已通过字符串的“中间”)时,while循环将结束 如果(lef
if(left
以及它如何自动表示它不是回文
left = 0;
right = i.length() -1;
while(i.charAt(left) == i.charAt(right) && right > left){
left++;
right--;
}
System.out.println();
if (left < right)
System.out.println ("That string is Not a palindrome.");
else
System.out.println("That string IS a palindrome");
left=0;
右=i.长度()-1;
而(i.charAt(左)=i.charAt(右)和&右>左){
左++;
对--;
}
System.out.println();
if(左<右)
System.out.println(“该字符串不是回文。”);
其他的
System.out.println(“该字符串是回文”);
回文测试只有在字符串都是大写或小写时才有效
当左字符不等于右字符,或者右索引>左索引(您已通过字符串的“中间”)时,while循环将结束
如果(left我希望这会有所帮助。回文测试只有在字符串都是大写或小写时才有效 当左字符不等于右字符,或者右索引>左索引(您已通过字符串的“中间”)时,while循环将结束 如果(left
我希望这会有所帮助。while循环基本上会同时遍历从两侧开始的潜在回文,并比较每一侧的字符。它会检查是否(右>左),因为如果是,这意味着“右”和“左”计数器没有相互传递,因此没有到达(或传递)绳子的中间。 在这个检查之后,它将向右递减(因此它将稍微靠近字符串的中心),并递增“左”(出于相同的原因) 最后,如果“left”仍然小于“right”,则表示循环在“left”或“right”到达字符串中间之前停止,这是因为在某个阶段,相反索引上的字符匹配的条件为false
如果他们真的达到(或通过)中间的“left”将大于等于“right”,这意味着字符匹配条件至少在字符串的中间是正确的,因此是回文。while循环基本上会同时遍历从两侧开始的潜在回文,并比较每一侧的字符。它正在检查是否(right>left)因为如果是,则表示“right”和“left”计数器没有相互传递,因此没有到达(或传递)字符串的中间。 在这个检查之后,它将向右递减(因此它将稍微靠近字符串的中心),并递增“左”(出于相同的原因) 最后,如果“left”仍然小于“right”,则表示循环在“left”或“right”到达字符串中间之前停止,这是因为在某个阶段,相反索引上的字符匹配的条件为false
如果它们到达(或通过)中间,“left”将大于等于“right”,这意味着字符匹配条件至少在字符串中间为true,因此是回文。使用print语句可以帮助观察程序运行时的操作
class Ideone
{
private static void checkPalindrome(String i) {
int left = 0;
int right = i.length() -1;
System.out.println("This word is: " + i);
System.out.println("Checking charAt(" + left + ") which is " +
i.charAt(left) + " and chartAt(" + right + ") which is " +
i.charAt(right));
while(i.charAt(left) == i.charAt(right) && right > left) {
left++; right--;
System.out.println("Checking charAt(" + left + ") which is " +
i.charAt(left) + " and chartAt(" + right + ") which is " +
i.charAt(right));
}
System.out.println();
if (left < right)
System.out.println ("That string is Not a palindrome.");
else
System.out.println("That string IS a palindrome");
System.out.println();
}
public static void main (String[] args) throws java.lang.Exception
{
checkPalindrome("racecar");
checkPalindrome("abba");
checkPalindrome("java");
}
}
如您所见,while循环从字符串的远端开始,比较每侧的字符;如果它们相同,则在每侧移动一个字符。它检查right>left
,以便知道何时停止。一旦到达中间,right
将至少相等,如果不大于,left/代码>因为它们在中间相遇,而且方向相反。
<代码>左>右< /代码>等效于Le>>List 。如果两个在中间相遇,这将是正确的。如果<代码>左边<右/代码>,则它们不能在中间相遇。您应该能够在上面的输出中看到这一点。
使用print语句可以在程序运行时观察程序的运行情况
class Ideone
{
private static void checkPalindrome(String i) {
int left = 0;
int right = i.length() -1;
System.out.println("This word is: " + i);
System.out.println("Checking charAt(" + left + ") which is " +
i.charAt(left) + " and chartAt(" + right + ") which is " +
i.charAt(right));
while(i.charAt(left) == i.charAt(right) && right > left) {
left++; right--;
System.out.println("Checking charAt(" + left + ") which is " +
i.charAt(left) + " and chartAt(" + right + ") which is " +
i.charAt(right));
}
System.out.println();
if (left < right)
System.out.println ("That string is Not a palindrome.");
else
System.out.println("That string IS a palindrome");
System.out.println();
}
public static void main (String[] args) throws java.lang.Exception
{
checkPalindrome("racecar");
checkPalindrome("abba");
checkPalindrome("java");
}
}
如您所见,while循环从字符串的远端开始,比较每侧的字符;如果它们相同,则在每侧移动一个字符。它检查right>left
,以便知道何时停止。一旦到达中间,right
将至少相等,如果不大于,left/代码>因为它们在中间相遇,而且方向相反。
<代码>左>右< /代码>等效于Le>>List 。如果两个在中间相遇,这将是正确的。如果<代码>左边<右/代码>,则它们不能在中间相遇。您应该能够在上面的输出中看到这一点。
while语句中的条件检查是否X==Y
和X
。如果这些条件不再有效,它将中断while循环
考虑下面的回文
迭代1:
X Y
+ +
| |
+-v--+----+---+---+---+---+---+---+-v-+
| | | | | | | | | |
| A | B | C | D | E | D | C | B | A |
+----+----+---+---+---+---+---+---+---+
迭代2:
+----+----+---+---+---+---+---+---+---+
| | | | | | | | | |
| A | B | C | D | E | D | C | B | A |
| | | | | | | | | |
+----+----+---+---+---+---+---+---+---+
^ ^
| |
+ +
X Y
迭代3:
X Y
+ +
| |
v v
+----+----+---+---+---+---+---+---+---+
| | | | | | | | | |
| A | B | C | D | E | D | C | B | A |
| | | | | | | | | |
+----+----+---+---+---+---+---+---+---+
迭代4:
X Y
+ +
| |
+- --+----+---+-v-+---+-v-+---+---+- -+
| | | | | | | | | |
| A | B | C | D | E | D | C | B | A |
+----+----+---+---+---+---+---+---+---+
迭代5:循环将在此点中断。因为X
不再有效
XY
++
||
+----+----+---+---+vv-+---+---+---+---+
| | | | | | | | | |
| A | B | C | D | E | D | C | B | A |
| | | | | | | | | |
+----+----+---+---+---+---+---+---+---+
如果上面的例子不是回文,看起来像这样
+- --+----+---+-v-+---+-v-+---+---+- -+
| | | | | | | | | |
| A | B | K | D | E | D | C | B | A |
+----+----+---+---+---+---+---+---+---+
然后,由于第一个条件X==Y
无效,您的while循环在第三次迭代时中断。此时X
仍将小于Y
。因此,如果字符串不是回文,while循环肯定会在X
和Y
满足这两个条件之前中断,即while sta中始终X
条件tement检查是否X==Y
和X
。如果这些条件不再有效,它将中断while循环
考虑下面的回文
伊特拉