尝试使用整数数组求解回文

时间:2015-03-11 13:19:35

标签: java arrays palindrome

我正在编写一个程序,可以帮助我找出输入的数字是否是回文,但我正在尝试使用数组。我想知道这是否可能?如果有可能那么我做错了什么。

我已经标记了我认为问题所在的代码,但随时可以提出建议。!!!!

谢谢!

import java.util.Scanner;


public class palindrome
{
 public static void main(String args[])
 {
    int size = 10,i,j,flag=0;
    int num[] = new int[size];

    Scanner sc = new Scanner(System.in);
        System.out.println("Enter the size of the number ");
            size = sc.nextInt();
            System.out.println("Enter the number ");
    for(i=0;i<size;i++)
    {
        num[i]=sc.nextInt();
    }
    i=size-1;
    for(j=0;j<(size/2);j++,i--)
    {
        if(i>(size/2))
        {
                        if(num[i]==num[j])   
            {
                flag = 1;
            }
        }
    }
    if(flag==1)
    {
        System.out.println("The number is a palindrome");

    }
    else
        System.out.println("The number is not a palindrome ");
 }
} 

编辑:伙计问题实际上已经解决,因为我犯了一个错误的错误,即我要求用户以arry的形式输入数字,但我实际上并没有在数字中逐个输入数字而是我在第一次迭代中输入了整数。

但仍然非常感谢回复。我仍会尝试你的想法让你们知道。感谢

:)

4 个答案:

答案 0 :(得分:2)

尝试

public boolean isPalindrome(int[] num){
    for(int i = 0 ; i < num.length/2 ; i++) {
        if(num[i]!=num[num.length-(i+1)]) return false;
    }
    return true;
}

答案 1 :(得分:2)

是的,可能,此外,您可以使用ArrayListString - 随心所欲 。为了记下正确的实现,首先分解您当前的解决方案

  // Extract a method, do not cram all code into main()
  // note: all you need is array, to get size of the array, put value.length
  private static boolean isPalindrome(int[] value) {
    ...
  }

  public static void main(String args[]) {
    int userInput[];
    ...

    if (isPalindrome(userInput)) {
      System.out.println("The number is a palindrome");
    }
    else {
      System.out.println("The number is not a palindrome");
    }
  } 

现在,让我们实施isPalindrome()

  private static boolean isPalindrome(int[] value) {
    if (null == value)
      return true; //TODO: or false, or throw exception

    for (int i = 0; i < value.length / 2; ++i)
      if (value[i] != value[value.length - 1 - i])
        return false;

    return true;
  }

答案 2 :(得分:1)

检查回文的最简单,最直观的方式(imo)是通过递归。这个想法很简单:

第一个和最后一个字符是否相同?
删除第一个和最后一个字符,检查新String的第一个和最后一个字符 没有回文。

当输入只有1 char时,它就是微不足道的。

看一下这段代码:

private void isPalindrome(String number){
    if(number.length() == 1){
        System.out.println("yes");
    }else if(number.charAt(0) == number.charAt(number.length()-1)){
        isPalindrome(number.substring(1, number.length()-1));
    }else{
        System.out.println("no");
    }
}

测试:

isPalindrome(String.valueOf(232))返回"yes"
isPalindrome(String.valueOf(23))返回"no"

当然,这也适用于Array。用数组替换参数并以相同的方式搜索索引。当减少数组时,只需创建一个没有前一个数组的第一个和最后一个索引的新的较小数组。

答案 3 :(得分:0)

你的课有几个问题:

  • 首先,您不会检查号码是否是回文。您的算法存在缺陷
  • 其次,你要求输入一个大小,但最后,用户输入它但你不自己使用它。相反,您在数字数组中使用了引入的值。

这是你应该怎么做的。

public class Palindrome {

  private static boolean isPalindrome(int[] array) {
    for (int i = 0, j = array.length-1; i < j; i++, j--) {
      if (array[i] != array[j]) {
        return false;
      }
    }
    return true;
  }

  public static void main(String args[]) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("How many numbers do you want to enter? ");
    int size = scanner.nextInt();
    int[] numbers = new int[size];
    for (int i = 0; i < size; i++) {
      System.out.printf("Enter number %s: ", i+1);
      numbers[i] = scanner.nextInt();
    }
    if (isPalindrome(numbers)) {
      System.out.println("The number is a palindrome");
    } else {
      System.out.println("The number is not a palindrome");
    }
  }
}