Difference between revisions of "Palindromes"
(Fixed typos, formatting, etc in problem description.) |
(Fixed typos, reworded numerous sentences, fixed formatting, etc, etc. My eyes hurt.) |
||
Line 62: | Line 62: | ||
|Solution= | |Solution= | ||
− | First of all, you will need to declare two string objects to | + | First of all, you will need to declare two string objects to store the reversed words. <br> |
− | You will need to | + | You will need to <b>initialize</b> the strings, which means make the strings empty. <br> |
<br/> | <br/> | ||
<pre> | <pre> | ||
Line 70: | Line 70: | ||
</pre> | </pre> | ||
<br/> | <br/> | ||
− | Then, you will need | + | Then, you will need a for loop to reverse the first word. This loop will start from 0 and finish looping when i >= testWord1.length.<br> |
− | The increment will be 1 since we are getting each character from the string.<br | + | The increment will be 1 since we are getting each character from the string.<br> |
− | <br | + | <br> |
<pre> | <pre> | ||
for(int i = 0; i < testWord1.length(); i++) | for(int i = 0; i < testWord1.length(); i++) | ||
Line 78: | Line 78: | ||
} | } | ||
</pre> | </pre> | ||
− | <br | + | <br> |
− | Once you have the for loop set up, you will need to go through each letter of the string | + | Once you have the for loop set up, you will need to go through each letter of the string using charAt(i) and concatenate the letters in reverse order.<br> |
− | The peusdo-code below concatenates each letter of the string in reversed order.<br | + | The peusdo-code below concatenates each letter of the string in reversed order.<br> |
− | <br | + | <br> |
<pre> | <pre> | ||
reverse1 = get the letters of the str by charAt(i) + reverse1 | reverse1 = get the letters of the str by charAt(i) + reverse1 | ||
</pre> | </pre> | ||
<br/> | <br/> | ||
− | Then, you will need another for loop to reverse testWord2. This time, we will use | + | Then, you will need another for loop to reverse testWord2. This time, we will use another approach and make the for loop start from the end.<br/> |
− | It's strongly recommended to try this way, | + | It's strongly recommended to try this way, as it will give you a better understanding of how the for loop works.<br> |
− | <br | + | <br> |
<pre> | <pre> | ||
for(int i = testWord2.length()-1; i >= 0; i--) | for(int i = testWord2.length()-1; i >= 0; i--) | ||
Line 94: | Line 94: | ||
} | } | ||
</pre> | </pre> | ||
− | <br | + | <br> |
− | The code above starts from the length of | + | The code above starts from the length of testWord2 - 1, and ends when i becomes less than 0. Why does it have to start from the string length - 1?<br> |
− | It's because there is no character at the length of the string. See the example below.<br | + | It's because there is no character at the length of the string. See the example below.<br> |
− | What is the length of the string, str = "apple"? It's 5.<br | + | What is the length of the string, str = "apple"? It's 5.<br> |
− | What is the index of the last character e in the string? It's 4 | + | What is the index of the last character e in the string? It's 4!<br> |
− | <br | + | <br> |
− | If you try to get a character at str.charAt(5), | + | If you try to get a character at str.charAt(5), you will get a run-time error.<br> |
− | This is very important to know and you will be facing many variations of these errors later.<br | + | This is very important to know and you will be facing many variations of these errors later.<br> |
− | <br | + | <br> |
− | Now, back to the question.<br | + | Now, back to the question.<br> |
− | We have to decrement it by 1 now, because we are | + | We have to decrement it by 1 now, because we are reading from the last character of the string.<br> |
− | How would concatenation work now?<br | + | How would concatenation work now?<br> |
− | <br | + | <br> |
<pre> | <pre> | ||
reverse2 = reverse2 + letters of the str by charAt(i) | reverse2 = reverse2 + letters of the str by charAt(i) | ||
Line 112: | Line 112: | ||
str = "abcde"<br/> | str = "abcde"<br/> | ||
<br/> | <br/> | ||
− | reverse = reverse + charAt(i) of str from end would be<br | + | reverse = reverse + charAt(i) of str from end would be<br> |
− | e<br | + | e<br> |
− | ed<br | + | ed<br> |
− | edc<br | + | edc<br> |
− | edcb<br | + | edcb<br> |
− | edcba<br | + | edcba<br> |
− | + | ||
− | + | ||
<br/> | <br/> | ||
+ | Once you have the two words reversed, you will need a condition statement to check if they are palindromes.<br> | ||
+ | <br> | ||
<pre> | <pre> | ||
if testWord == reversedTestWord | if testWord == reversedTestWord | ||
Line 131: | Line 131: | ||
} | } | ||
</pre> | </pre> | ||
− | <br | + | <br> |
− | One thing to note | + | One thing to note: strings cannot be compared using the double equals operator '=='.<br> |
− | You will need a special method called:<br | + | You will need a special method called:<br> |
− | <br | + | <br> |
<pre> | <pre> | ||
testWord.equals(reversedTestWord). | testWord.equals(reversedTestWord). | ||
</pre> | </pre> | ||
− | <br | + | <br> |
* If you want to check without matching cases, use | * If you want to check without matching cases, use | ||
<pre> | <pre> | ||
str.equalsIgnoreCase() | str.equalsIgnoreCase() | ||
</pre> | </pre> | ||
− | <br | + | <br> |
See below for the solution code. | See below for the solution code. | ||
}} | }} |
Revision as of 19:41, 8 April 2010
Back to the Program-A-Day homepage
ProblemThis question will help you practice with string methods and for loops. public class Palindrome { public static void main(String[] args) { String testWord1 = "Arewenotdrawnonward,wefew,drawnonwardtonewera" String testWord2 = "Murderforajarofredrum" // Your code goes here } } |
Palindromes
| |
---|---|---|
SolutionFirst of all, you will need to declare two string objects to store the reversed words. String reverse1 = "" String reverse2 = ""
for(int i = 0; i < testWord1.length(); i++) { }
reverse1 = get the letters of the str by charAt(i) + reverse1
for(int i = testWord2.length()-1; i >= 0; i--) { }
reverse2 = reverse2 + letters of the str by charAt(i) str = "abcde" if testWord == reversedTestWord { Then, print out success } else { print out reservedTestWord }
testWord.equals(reversedTestWord).
str.equalsIgnoreCase()
| ||
Code |