2013-05-28 1 views
0

저는 현재 Java를 배우고 있으며 첫 번째 프로그램을 마쳤습니다. 이 프로그램은 정수와 문자열 모두에 대해 회문을 구현합니다. 내 코딩 배경은 C++이지만, 코드를 더 잘 구조화 할 수있는 방법에 대한 조언이 있거나 (코드를 더 쉽게 읽을 수 있도록) 코드를 좀 더 압축 할 수있는 방법에 대한 조언이 있다면 궁금합니다. 가능한 한 많은 건설적인 비판을 주시기 바랍니다. 여름이 끝날 무렵 엔 엔트리 레벨의 소프트웨어 공학직을 신청할 계획이므로 모든 피드백을 환영합니다! 고마워.회문 코드를 어떻게 최적화 할 수 있습니까?

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'에 대해서 문자열을 즉시 변환하고'int'에 대한 별도의 함수 세트를 갖기보다는'reverseString'을 통해 실행하는 것입니다. 그냥 생각. – lurker

+0

감사! 바로 시작하겠습니다. – JSCOTT12

+0

메서드 설명서는 javaDoc 주석 (/ **로 시작하는)을 사용하는 메서드 외부에서 typicall로 처리됩니다. –

답변

1

코드는 매우 읽기 쉬운,하지만 같은 이상한 대부분의 자바 프로그래머를 공격 할 측면은 다음과 같습니다

  • static 방법
  • 당신은 당신의 분야 또는 지역을 캡슐화되지 않은 사실의 사용 행동 양식.

이 내용은 사소한 세부 사항이지만이 크기의 장난감 프로그램은 분명합니다.

문자열을 뒤집기 위해 기존 기능을 사용하면 입력 크기에 선형으로 비례하므로이 문제를 해결할 수있는 최상의 방법입니다.

한편, 문자열 palindrome 테스트에 대한 일정 속도 향상은 확실히 차이를 찾거나 중간에 도달 할 때까지 처음 문자와 마지막 문자를 비교 한 다음 두 번째 문자와 마지막 문자 등을 비교하여 확실히 가능합니다. 그 아이디어 자체는 프로그래밍 언어에 전혀 의존하지 않습니다.

0

코드는 명확하게 명명 된 변수 및 메서드로보기에는 꽤 좋습니다. int에 문자열을 변환하는 것에 관해서는 mbratch에 동의합니다. 2 가지 이유 :

  • 회문 너무 문자열로 int를 복용하고 int로서에 복용하고 반전과 같은 결과가됩니다 반전, 특정 입력하지, 그래서 당신은 쉽게 그것을 문자열을 유지할 수 있으며, stringPalindromeCheck() 메소드를 다시 사용하십시오.
  • 사용자가 정수를 입력해야하면 오류 처리 코드가 필요합니다. int를 요청하고 "int가 아닌"또는 "123.4"를 제공하는 경우 유효한지 확인하고 그렇지 않은 경우 다시 요청해야합니다. 사용자가해야 할 일을 사용자가 수행 할 것이라고 절대 믿을 수는 없습니다.

int 관련 입력 프롬프트와 해당 메서드를 제거하면 읽기 쉬운 코드를 더 깨끗하게 만들 수 있습니다.