Question

So I'm still shaky on how basic java works, and here is a method I wrote but don't fully understand how it works anyone care to explain?

It's supposed to take a value of s in and return it in its reverse order.

Edit: Mainly the for loop is what is confusing me.

So say I input "12345" I would want my output to be "54321"

Public string reverse(String s){
 String r = "";
 for(int i=0; i<s.length(); i++){
   r = s.charAt(i) + r;
}
  return r;
}
Was it helpful?

Solution

We do a for loop to the last index of String a , add tha carater of index i to the String s , add here is a concatenation :

Example

String z="hello";
String x="world";

==> x+z="world hello" #different to z+x ="hello world"

for your case :

String s="";
String a="1234";
s=a.charAt(0)+s ==> s= "1" + "" = "1" ( + : concatenation )
s=a.charAt(1)+s ==> s='2'+"1" = "21" ( + : concatenation )
s=a.charAt(2)+s ==> s='3'+"21" = "321" ( + : concatenation )
s=a.charAt(3)+s ==> s='3'+"321" = "4321" ( + : concatenation )

etc..

public String reverse(String s){
         String r = ""; //this is the ouput , initialized to " "
         for(int i=0; i<s.length(); i++){  
           r = s.charAt(i) + r; //add to String r , the caracter of index i 
        }
          return r;
        }

OTHER TIPS

What this code does is the following

Create a new variable r="";

then looping for the string in input lenght it adds at the beginning of r the current character of the loop.

  • i=0) r="1"
  • i=1) r="21"
  • i=2) r="321"
  • i=3) r="4321"
  • i=4) r="54321"

When you enter the loop you are having empty string in r.
Now r=""

In 1st iteration, you are taking first character (i=0) and appending r to it.
r = "1" + "";
Now r=1

In 2nd iteration, you are taking second character (i=1) and appending r to it
r = "2" + "1";
Now r=21

You can trace execution on a paper like this, then you will easily understand what is happening.

What the method is doing is taking the each character from the string s and putting it at the front of the new string r. Renaming the variables may help illustrate this.

public String reverse(String s){
    String alreadyReversed = "";
    for(int i=0; i<s.length(); i++){
        //perform the following until count i is as long as string s
        char thisCharacterInTheString = s.charAt(i); // for i==0 returns first 
                                                     // character in passed String
        alreadyReversed = thisCharacterInTheString + alreadyReversed;
    }
    return alreadyReversed;
}

So in the first iteration of the for loop alreadyReversed equals 1 + itself (an empty string).

In the second iteration alreadyReversed equals 2 + itself (1).
Then 3 + itself (21).
Then 4 + 321.
Then 5 + 4321.

GO back to your problem statement (take an input string and produce an output string in reverse order). Then consider how you would do this (not how to write Java code to do this).

You would probably come up with two alternatives:

  1. Starting at the back of the input string, get one character at a time and form a new string (thus reversing its order).
  2. Starting at the front of the string, get a character. Then for each next character, put it in front of all the characters you have created so far.

Your pseudo code results might be like the following

Option 1
let l = the length of the input string set the output string to "" while l > 0 add the "lth" character of the input string to the output string subtract 1 from l

Option 2 left as an exercise for the questioner.

Then you would consider how to write Java to handle your algorithm. You will find that there are several ways to get the "lth" character of a string. First, in Java a string of length l has characters in position 0 through l-1. You can use string.charAt(loc) or string.substring(loc,loc+1) to get the character at position loc

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top