Java 中的字符数组问题疑难解答
Troubleshooting Character Array Problem in Java
我正在经历一个回文(特别是字符串回文)问题,正在检查字符串是否是回文。但是程序出现问题
public static void main(String args[])
{
Scanner sc= new Scanner(System.in);
int n,flag=0;
n=sc.nextInt();
char a[]=new char[n];
int l=0;
int h=n-1;
while(l<h)
{
if(a[l++]!=a[h--])
{
flag=1;
}
}
if(flag==1)
{
System.out.println("String is not Palindrome");
}
else{
System.out.println("String is Palindrome");
}
}
上面是我写的代码,但问题是,我创建了一个字符数组而不是字符串。
争论的重点是上述代码在代码标准方面是正确的。
请使用下面的代码来检查给定的 String/number 是否回文
public static void main(String args[]) {
String original, reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter String ");
original = in.nextLine();
int n = original.length();
for ( int index = n - 1; index >= 0; index-- ) {
reverse = reverse + original.charAt(index);
}
if (original.equals(reverse)) {
System.out.println("String is Palindrome");
} else {
System.out.println("String is not Palindrome");
}
}
is the above code correct in terms of code standards
不是真的:
不要将局部变量命名为 l
(小写 L)。太容易和1
(一)混淆了。
因为我不知道 h
应该是什么 shorthand,所以我在下面将 l
和 h
更改为 i
和 j
,因为这些是非常常见的整数迭代器变量名称。
不要在需要之前声明局部变量。使用 int n = sc.nextInt();
不要在变量名上放置数组声明。把它放在类型上,因为它定义了类型。
不要将 0
/ 1
用于 false
/ true
值。将 flag
更改为 boolean
,并将其命名为更好的名称,例如描述它的价值。 notPalindrome
在这里似乎很合适。它有助于记录代码。
while
循环应该是 for
循环。它有助于将循环逻辑保持在一起,并与其他逻辑隔离,并且有助于限制循环变量的范围。
这些是我对编码标准的评论。
但是,您的代码不起作用,因为您永远无法从用户那里获得字符串。您选择使用 char[]
没问题,但您需要更改获取它的逻辑。请参阅下面的代码,了解如何使用 toCharArray()
来做到这一点。
此外,一旦发现差异,您应该退出循环,方法是同时检查循环条件中的布尔变量,或使用 break
。就个人而言,我更喜欢 break
.
Scanner sc = new Scanner(System.in);
String sentence = sc.nextLine();
char[] a = sentence.toCharArray();
boolean notPalindrome = false;
for (int i = 0, j = a.length - 1; i < j; i++, j--) {
if (a[i] != a[j]) {
notPalindrome = true;
break;
}
}
if (notPalindrome) {
System.out.println("String is not Palindrome");
} else {
System.out.println("String is Palindrome");
}
我正在经历一个回文(特别是字符串回文)问题,正在检查字符串是否是回文。但是程序出现问题
public static void main(String args[])
{
Scanner sc= new Scanner(System.in);
int n,flag=0;
n=sc.nextInt();
char a[]=new char[n];
int l=0;
int h=n-1;
while(l<h)
{
if(a[l++]!=a[h--])
{
flag=1;
}
}
if(flag==1)
{
System.out.println("String is not Palindrome");
}
else{
System.out.println("String is Palindrome");
}
}
上面是我写的代码,但问题是,我创建了一个字符数组而不是字符串。 争论的重点是上述代码在代码标准方面是正确的。
请使用下面的代码来检查给定的 String/number 是否回文
public static void main(String args[]) {
String original, reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter String ");
original = in.nextLine();
int n = original.length();
for ( int index = n - 1; index >= 0; index-- ) {
reverse = reverse + original.charAt(index);
}
if (original.equals(reverse)) {
System.out.println("String is Palindrome");
} else {
System.out.println("String is not Palindrome");
}
}
is the above code correct in terms of code standards
不是真的:
不要将局部变量命名为
l
(小写 L)。太容易和1
(一)混淆了。 因为我不知道h
应该是什么 shorthand,所以我在下面将l
和h
更改为i
和j
,因为这些是非常常见的整数迭代器变量名称。不要在需要之前声明局部变量。使用
int n = sc.nextInt();
不要在变量名上放置数组声明。把它放在类型上,因为它定义了类型。
不要将
0
/1
用于false
/true
值。将flag
更改为boolean
,并将其命名为更好的名称,例如描述它的价值。notPalindrome
在这里似乎很合适。它有助于记录代码。while
循环应该是for
循环。它有助于将循环逻辑保持在一起,并与其他逻辑隔离,并且有助于限制循环变量的范围。
这些是我对编码标准的评论。
但是,您的代码不起作用,因为您永远无法从用户那里获得字符串。您选择使用 char[]
没问题,但您需要更改获取它的逻辑。请参阅下面的代码,了解如何使用 toCharArray()
来做到这一点。
此外,一旦发现差异,您应该退出循环,方法是同时检查循环条件中的布尔变量,或使用 break
。就个人而言,我更喜欢 break
.
Scanner sc = new Scanner(System.in);
String sentence = sc.nextLine();
char[] a = sentence.toCharArray();
boolean notPalindrome = false;
for (int i = 0, j = a.length - 1; i < j; i++, j--) {
if (a[i] != a[j]) {
notPalindrome = true;
break;
}
}
if (notPalindrome) {
System.out.println("String is not Palindrome");
} else {
System.out.println("String is Palindrome");
}