Difference between revisions of "Palindromes"
(33 intermediate revisions by 4 users not shown) | |||
Line 4: | Line 4: | ||
|Problem= | |Problem= | ||
− | This question will help you practice with | + | This question will help you practice with string methods and <b>for</b> loops.<br> |
− | <br | + | <br> |
− | Complete the program | + | Complete the program titled Palindrome that checks if a word is a palindrome.<br> |
− | If the word is palindrome, print out "It's a palindrome." using System.out.println().<br | + | If the word is palindrome, print out "It's a palindrome." using System.out.println().<br> |
− | Otherwise, print out reversed order of the word.<br | + | Otherwise, print out the reversed order of the word.<br> |
− | <br | + | <br> |
− | For example | + | For example: |
− | "tomato" and "mama" are not palindromes. | + | *"deed" and "civic" are palindromes. |
− | <br | + | *"tomato" and "mama" are not palindromes. |
− | + | ||
− | The program that you need to complete is provided below. | + | <br> |
− | <br | + | Find out whether the two strings provided are palindromes or not.<br> |
− | < | + | The program that you need to complete is provided below.<br> |
+ | <br> | ||
+ | {{CodeBlock | ||
+ | |Code= | ||
public class Palindrome | public class Palindrome | ||
{ | { | ||
Line 26: | Line 29: | ||
// Your code goes here | // Your code goes here | ||
} | } | ||
− | } | + | } |
+ | }} | ||
− | |SideSectionTitle= | + | |SideSectionTitle=Mid-term Review |
|SideSection= | |SideSection= | ||
− | [[Image: | + | [[Image:wiki_trays01.jpg|center]]<BR> |
− | <BR> | + | |
− | + | ||
− | |||
− | |SolutionCode= | + | |SolutionCode= |
String reversedWord1 = ""; | String reversedWord1 = ""; | ||
String reversedWord2 = ""; | String reversedWord2 = ""; | ||
Line 60: | Line 61: | ||
System.out.println(reversedWord1); | System.out.println(reversedWord1); | ||
} | } | ||
− | |||
− | |||
|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> |
− | + | {{CodeBlock | |
+ | |Code= | ||
String reverse1 = "" | String reverse1 = "" | ||
String reverse2 = "" | String reverse2 = "" | ||
− | + | }} | |
− | <br | + | <br> |
− | Then, you will need | + | Then, you will need a for loop to reverse the first word. <br> |
− | The increment will be 1 since we are | + | In order to loop through each character, you will need to set the for loop to run for the length of the string. <br> |
− | <br | + | <br> |
− | + | Getting a length of a string can be done by using <br> | |
+ | <br> | ||
+ | {{CodeBlock | ||
+ | |Code= | ||
+ | str.length(); | ||
+ | }} | ||
+ | <br> | ||
+ | The loop will start from 0 and finish looping when i >= testWord1.length(). <br> | ||
+ | The increment will be 1 since we are accessing each character from the string. <br> | ||
+ | <br> | ||
+ | {{CodeBlock | ||
+ | |Code= | ||
for(int i = 0; i < testWord1.length(); i++) | for(int i = 0; i < testWord1.length(); i++) | ||
{ | { | ||
} | } | ||
− | + | }} | |
− | <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 <b>''charAt(i)''</b>, and concatenate the letters in reverse order. <br> |
− | The | + | charAt(int index) is a string method that returns the i<sup>th</sup> character of a string.<br> |
− | <br | + | The pseudo-code below concatenates each letter of the string in reversed order.<br> |
− | + | <br> | |
+ | {{CodeBlock | ||
+ | |Code= | ||
reverse1 = get the letters of the str by charAt(i) + reverse1 | reverse1 = get the letters of the str by charAt(i) + reverse1 | ||
− | + | }} | |
− | <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. <br> |
− | It's strongly recommended to try this way, | + | This time, we will use another approach and make the for loop start from the end. <br> |
− | <br | + | It's strongly recommended to try this way, as it will give you a better understanding of how the for loop works. <br> |
− | + | <br> | |
+ | {{CodeBlock | ||
+ | |Code= | ||
for(int i = testWord2.length()-1; i >= 0; i--) | for(int i = testWord2.length()-1; i >= 0; i--) | ||
{ | { | ||
} | } | ||
− | + | }} | |
− | <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.<br> |
− | It's because there is no character at the length of the string. See the example below.<br | + | Why does it have to start from the string length - 1? <br> |
− | What is the length of the string, str = "apple"? It's 5.<br | + | It's because there is no character at the length of the string. See the example below. <br> |
− | What is the index of the last character e in the string? It's 4 | + | What is the length of the string, str = "apple"? <br> |
− | <br | + | It's 5. <br> |
− | If you try to get a character at str.charAt(5), | + | What is the index of the last character e in the string? <br> |
− | This is very important to know and you will be facing many variations of these errors later.<br | + | It's 4! <br> |
− | <br | + | <br> |
− | Now, back to the question.<br | + | If you try to get a character at str.charAt(5), you will get a <b>run-time error</b>. <br> |
− | We have to decrement it by 1 now, because we are | + | This is very important to know and you will be facing many variations of these errors later.<br> |
− | How would concatenation work now?<br | + | <br> |
− | <br | + | Now, back to the question. <br> |
− | + | 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> | ||
+ | <br> | ||
+ | {{CodeBlock | ||
+ | |Code= | ||
reverse2 = reverse2 + letters of the str by charAt(i) | reverse2 = reverse2 + letters of the str by charAt(i) | ||
− | + | }} | |
− | 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 | + | Once you have the two words reversed, you will need a condition statement to check if they are palindromes. |
− | + | <br> | |
+ | {{CodeBlock | ||
+ | |Code= | ||
if testWord == reversedTestWord | if testWord == reversedTestWord | ||
{ | { | ||
Line 133: | Line 154: | ||
print out reservedTestWord | print out reservedTestWord | ||
} | } | ||
− | + | }} | |
− | <br | + | <br> |
− | One thing to note | + | One thing to note: strings <b>cannot</b> be compared using the double equals operator '=='.<br> |
− | You will need a special method called: | + | You will need a special method called: |
− | <br | + | <br> |
− | + | {{CodeBlock | |
+ | |Code= | ||
testWord.equals(reversedTestWord). | testWord.equals(reversedTestWord). | ||
− | + | }} | |
− | <br | + | <br> |
− | + | Please note that if you want to ignore capitalization for matching two strings, use <b>''equalsIgnoreCase()''</b> method. | |
− | < | + | <br> |
+ | {{CodeBlock | ||
+ | |Code= | ||
str.equalsIgnoreCase() | str.equalsIgnoreCase() | ||
− | < | + | }} |
− | <br | + | <br> |
+ | This problem was the review of 'String Methods and Debugging'.<br> | ||
See below for the solution code. | See below for the solution code. | ||
}} | }} |
Latest revision as of 03:24, 6 December 2011
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 } } |
Mid-term Review | |
---|---|---|
SolutionFirst of all, you will need to declare two string objects to store the reversed words. String reverse1 = "" String reverse2 = ""
str.length();
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" Once you have the two words reversed, you will need a condition statement to check if they are palindromes.
if testWord == reversedTestWord { Then, print out success } else { print out reservedTestWord }
testWord.equals(reversedTestWord).
str.equalsIgnoreCase()
| ||
Code |