Difference between revisions of "Palindromes"

From CompSciWiki
Jump to: navigation, search
(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 get reversed words. <br/>
+
First of all, you will need to declare two string objects to store the reversed words. <br>
You will need to INITIALIZE the strings, which means make the strings empty. <br/>
+
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 first for loop to reverse the first word. This loop will start from 0 and finishes looping when i >= testWord1.length.<br/>
+
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, using charAt(i) and concatenate the letters in reverse order.<br/>
+
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 some other approach and make the for loop start from the end.<br/>
+
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, because you will have better idea how the for loop works.<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/>
+
<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 testWord2 - 1, ends when i becomes less than 0. Why does it have to start from the string length - 1?<br/>
+
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!!<br/>
+
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), then you will get run-time errors.<br/>
+
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 getting from the end character of the string.<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/>
+
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/>
+
Once you have the two words reversed, you will need a condition statement to check if they are palindromes.<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 is, strings ''cannot'' be compared using '==' sings.<br/>
+
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

Problem

This question will help you practice with string methods and for loops.

Complete the program titled Palindrome that checks if a word is a palindrome. If the word is palindrome, print out "It's a palindrome." using System.out.println(). Otherwise, print out the reversed order of the word.

For example, "deed" and "civic" are palindromes.
"tomato" and "mama" are not palindromes.

Find out whether the two strings provided are palindromes or not. The program that you need to complete is provided below.

public class Palindrome 
{
	public static void main(String[] args)
	{
		String testWord1 = "Arewenotdrawnonward,wefew,drawnonwardtonewera"
		String testWord2 = "Murderforajarofredrum"
			
		// Your code goes here
	}
}
 

Palindromes

Wiki trays01.jpg


Solution

First of all, you will need to declare two string objects to store the reversed words.
You will need to initialize the strings, which means make the strings empty.

String reverse1 = ""
String reverse2 = ""


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.
The increment will be 1 since we are getting each character from the string.

for(int i = 0; i < testWord1.length(); i++)
{
}


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.
The peusdo-code below concatenates each letter of the string in reversed order.

reverse1 = get the letters of the str by charAt(i) + reverse1


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.
It's strongly recommended to try this way, as it will give you a better understanding of how the for loop works.

for(int i = testWord2.length()-1; i >= 0; i--)
{
}


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?
It's because there is no character at the length of the string. See the example below.
What is the length of the string, str = "apple"? It's 5.
What is the index of the last character e in the string? It's 4!

If you try to get a character at str.charAt(5), you will get a run-time error.
This is very important to know and you will be facing many variations of these errors later.

Now, back to the question.
We have to decrement it by 1 now, because we are reading from the last character of the string.
How would concatenation work now?

reverse2 = reverse2 + letters of the str by charAt(i)

str = "abcde"

reverse = reverse + charAt(i) of str from end would be
e
ed
edc
edcb
edcba

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
}


One thing to note: strings cannot be compared using the double equals operator '=='.
You will need a special method called:

testWord.equals(reversedTestWord).


  • If you want to check without matching cases, use
str.equalsIgnoreCase()


See below for the solution code.

Code

Solution Code

Back to the Program-A-Day homepage