2013-05-28 3 views
0

В настоящее время я изучаю Java, и я только что закончил писать свою первую программу. Эта программа реализует палиндром как для целых чисел, так и для строк. Мой фон кодирования находится на C++, но мне было интересно, есть ли у кого-нибудь советы о том, как лучше структурировать код (упростить чтение) или советы о том, как я могу скомпенсировать код немного лучше. Пожалуйста, не стесняйтесь давать как можно больше конструктивной критики. К концу лета я планирую подать заявку на должность начального уровня Software Engineering, поэтому я приветствую любую обратную связь! Спасибо, парни.Как оптимизировать код палиндрома?

package projectprac; 

import java.util.Scanner; 

public class ProjectPrac { 

    static Scanner userInput = new Scanner(System.in); 

    public static int reverseInt(int x){ 
     /* This function will reverse an integer value */ 
     int reverse = 0; 
     int temp = x; 
     while(x != 0){ 
      reverse = reverse * 10; 
      reverse = reverse + x % 10; 
      x = x/10; 
     } 
     intPalindromeCheck(temp, reverse); 
     return reverse; 
    } 

    public static String reverseString(String word){ 
     /* This function will return a String value */ 
     String reverse = new StringBuffer(word).reverse().toString(); 
     stringPalindromeCheck(word, reverse); 
     return reverse; 
    } 

    public static void intPalindromeCheck(int one, int two){ 
     /* This function will check to see if int 
     * is a Palindrome 
     */ 
     if(one == two){ 
      System.out.println(one + " is a Palindrome!"); 
     } 
     else{ 
      System.out.println(one + " is NOT a Palindrome!"); 
     } 
    } 

    public static void stringPalindromeCheck(String one, String two){ 
     /* This function will check to see if String is a 
     * Palindrome 
     */ 

     if(one.equals(two)){ 
      System.out.println(one + " is a Palindrome!"); 
     } 

     else{ 
      System.out.println(one + " is NOT a Palindrome!"); 
     } 
    } 

    public static void main(String[] args) { 
     String word; 
     int x = 0; 

     while (x != -1){ 

      System.out.print("What would you like to do 1. reverse int 2. reverse String: "); 
      x = userInput.nextInt(); 

      if(x == 1){ 
       System.out.print("Please input a number: "); 
       x = userInput.nextInt(); 
       System.out.println(reverseInt(x)); 
      } 

      else if (x == 2){ 
       userInput.nextLine(); //skips the new line 
       System.out.print("Please enter a string: "); 
       word = userInput.nextLine(); 
       System.out.println(reverseString(word)); 
      } 
     } 
    } 
} 
+0

Первое, что я сделал бы для «int», я бы сразу преобразовал его в строку и выполнил ее через 'reverseString', а не имел отдельный набор функций для' int'. Просто мысль. – lurker

+0

Спасибо! Я сразу начну. – JSCOTT12

+0

Документация по методу типична для внешнего метода, с комментариями javaDoc (начиная с/**) –

ответ

1

Ваш код вполне разборчиво, но аспекты, которые ударяют большинство Java программистов, как нечетные являются:

  • Использование static методов
  • Тот факт, что вы не герметизирующего ваше поле или местный методы.

Это небольшие детали, хотя, конечно же, для игрушечной программы такого размера.

Ваше использование существующих функций для изменения строки в порядке и масштабируется линейно по размеру ввода, что лучше всего подходит для этой проблемы.

С другой стороны, постоянное ускорение для теста палиндрома строки, безусловно, возможно, просто сравнивая первый и последний символы, затем второй и один, но последний и т. Д., Пока вы не найдете разницу или не достигнете середины. Эта идея сама по себе вовсе не зависит от языка программирования.

0

Этот код выглядит довольно хорошо с четко обозначенными переменными и методами. Я согласен с mbratch, хотя об преобразовании вашего int в строку. 2 причины:

  • палиндромы не типоспецифические, поэтому принимает Int в виде строки и реверсирования она будет иметь тот же результат, принимая его в качестве междунар и задним ходом, поэтому вы можете легко держать его строку и повторное использование вашего метода stringPalindromeCheck().
  • Как только вы потребуете от пользователя ввода целых чисел, вам понадобится код обработки ошибок. Если вы запрашиваете int, и они дают вам «не int» или «123.4», тогда вы должны проверить, действительно ли это, и спросить их снова, если это не так. Вы никогда не сможете доверять тому, что пользователи будут делать то, что они должны делать.

Устранение приглашения ввода, связанного с int, и его методы сделают ваш код для чтения более чистым.

Смежные вопросы