Java中字符数组问题的疑难解答
我遇到了一个回文(特别是字符串回文)问题,正在检查字符串是否是回文。但该计划出现了一个问题Java中字符数组问题的疑难解答,java,palindrome,Java,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) {
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");
}
}
publicstaticvoidmain(字符串参数[])
{
扫描仪sc=新的扫描仪(System.in);
int n,flag=0;
n=sc.nextInt();
字符a[]=新字符[n];
int l=0;
int h=n-1;
while(l请使用下面的代码检查给定的字符串/数字回文是否正确
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");
}
}
请使用下面的代码检查给定的字符串/数字回文是否正确
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");
}
}
上述规范在规范标准方面是否正确
不完全是:
- 不要命名局部变量
l
(小写l)。它很容易与1
(一)混淆。
由于我不知道h
应该是什么的缩写,我将l
和h
更改为下面的I
和j
,因为它们是非常常见的整数迭代器变量名
- 在需要局部变量之前不要声明它。使用
int n=sc.nextInt();
- 不要把数组声明放在变量名上。把它放在类型上,因为它定义了类型
- 不要将
0
/1
用于false
/true
值。将标志
更改为布尔值
,并对其进行更好的命名,例如描述其值。非回文
在这里似乎合适。它有助于记录代码
while
循环应该是for
循环。它有助于将循环逻辑保持在一起,并与其他逻辑隔离,还有助于限制循环变量的范围
这些是我对编码标准的评论
但是,您的代码不起作用,因为您从未从用户处获得字符串。您可以选择使用char[]
,但需要更改获取它的逻辑。有关如何使用,请参阅下面的代码
此外,一旦发现差异,您应该退出循环,或者在循环条件中检查布尔变量,或者使用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");
}
Scanner sc=新扫描仪(System.in);
字符串语句=sc.nextLine();
char[]a=句子.toCharArray();
布尔值notPalindrome=false;
对于(inti=0,j=a.length-1;i
上述规范在规范标准方面是否正确
不完全是:
- 不要命名局部变量
l
(小写l)。它很容易与1
(一)混淆。
由于我不知道h
应该是什么的缩写,我将l
和h
更改为下面的I
和j
,因为它们是非常常见的整数迭代器变量名
- 在需要局部变量之前不要声明它。使用
int n=sc.nextInt();
- 不要把数组声明放在变量名上。把它放在类型上,因为它定义了类型
- 不要将
0
/1
用于false
/true
值。将标志
更改为布尔值
,并对其进行更好的命名,例如描述其值。非回文
在这里似乎合适。它有助于记录代码
while
循环应该是for
循环。它有助于将循环逻辑保持在一起,并与其他逻辑隔离,还有助于限制循环变量的范围
这些是我对编码标准的评论
但是,您的代码不起作用,因为您从未从用户处获得字符串。您可以选择使用char[]
,但需要更改获取它的逻辑。有关如何使用,请参阅下面的代码
此外,一旦发现差异,您应该退出循环,或者在循环条件中检查布尔变量,或者使用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");
}
Scanner sc=新扫描仪(System.in);
字符串语句=sc.nextLine();
char[]a=句子.toCharArray();
布尔值notPalindrome=false;
对于(inti=0,j=a.length-1;i
那么问题到底是什么呢?顺便说一句,数组a
总是包含默认值。当您修复@Anatolii点时,您也可以在第一次之后立即返回(a[l++]!=a[h-->)计算结果为true。最后,我认为这个问题与主题无关。创建字符数组本身并不是问题。您到底想要什么?String
类还在内部将值存储为char
array。要检查字符串是否为回文,您需要按字符进行比较,因此使用char数组是绝对正确的。即使你使用一些字符串API包装器,在内部它也会这样做。那么问题到底是什么呢?顺便问一下,你的数组a
总是包含默认值。当你修复@Anatolii点时,你也可以在第一次之后立即返回(a[l++]!=a[h-->)计算结果为true。最后,我认为这个问题与主题无关。创建字符数组本身并不是问题。您到底想要什么?String
类还在内部将值存储为char
array。要检查字符串是否为回文,您需要按字符进行比较,因此使用char数组是绝对正确的。即使您使用一些字符串API包装器,在内部它也会这样做。