재미있고 간단한 두 단락 코드

1966 단어 performanceIDEA
자세히 보기
만약 당신이 작은 프로그램을 쓰고 싶다면 문자열의 앞뒤 두 문자가 똑같다는 것을 보증하면 다음과 같이 실현할 수 있습니다.
	public static boolean isPalindrome(String string) {
		for (int forward = 0, backward = string.length() - 1; forward < string
				.length(); forward++, backward--)
			if (string.charAt(forward) != string.charAt(backward))
				return false;
		return true;
	}

다른 방법으로는 성능이 좋지만 가독성이 떨어지는 것이 다음과 같습니다.
	public static boolean isPalindrome(String string) {
		if (string.length() == 0)
			return true;
		int limit = string.length() / 2;
		for (int forward = 0, backward = string.length() - 1; forward < limit; forward++, backward--)
			if (string.charAt(forward) != string.charAt(backward))
				return false;
		return true;
	}

agile java라는 책 중의 한 단락을 보면 다음과 같은 생각을 할 필요가 있다.
인용하다
"While normally you shouldn't worry about performance until it is a problem, an algorithm should be clean. Doing something unnecessarily in an algorithm demonstrates poor understanding of the problem. It can also confuse future developers"
다음은 테스트 코드입니다.
public void testPalindrome() {
   assertFalse(isPalindrome("abcdef"));
   assertFalse(isPalindrome("abccda"));
   assertTrue(isPalindrome("abccba"));
   assertFalse(isPalindrome("abcxba"));
   assertTrue(isPalindrome("a"));
   assertTrue(isPalindrome("aa"));
   assertFalse(isPalindrome("ab"));
   assertTrue(isPalindrome(""));
   assertTrue(isPalindrome("aaa"));
   assertTrue(isPalindrome("aba"));
   assertTrue(isPalindrome("abbba"));
   assertTrue(isPalindrome("abba"));
   assertFalse(isPalindrome("abbaa"));
   assertFalse(isPalindrome("abcda"));
}

좋은 웹페이지 즐겨찾기