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包装器,在内部它也会这样做。