Kj45
Kj45

Reputation: 79

How can I reprint a string starting from the first character till the last?

Given a non-empty string str like "Code" print a string like "CCoCodCode". Where at each index in the string you have to reprint the string up to that index.

I know there is DEFINITELY something wrong with this code that I wrote because the answer should be CCoCodCode, but instead it's giving me the alphabet! I don't know how I should change it.

public static void main(String[] args)
{
    Scanner scan = new Scanner(System.in);

      String str = scan.next();
        int x = str.length();
        for(char i = str.charAt(0); i <= str.charAt(x-1); i++)
        {
            System.out.print(i);
        }
}

Upvotes: 0

Views: 160

Answers (4)

Flying_Banana
Flying_Banana

Reputation: 2910

It is outputting the alphabet because you are printing the counter instead of the characters in the string!

As it is, the first iteration of the for loop will set i to the first character, print that, then the operation i++ will increment i by one. Wait, so if the first character is "C", so i = 'C', what is i++?

Well it turns out characters can be represented by numbers. For example, 'C' has a value of 67. So incrementing it makes it 68, which represents 'D'. So if you run the loop on "Code", it will increment your counter 4 times, giving "CDEF". If you run on "Codecodecode", that will make the loop run 12 times, giving "CDEFGHIJKLMN".

What you really want is to loop through the string by its index instead:

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    String str = scan.next();
    int length = str.length();
    for (int i = 0; i < length; i++) {
        System.out.print(str.substring(0, i + 1));
    }
}

Upvotes: 0

Many ways to get it done, suppose we have the input from user stored in a string named "c"... then...

        String c = "Code";
        for (int i = 0; i < c.length(); i++) {
            System.out.print(c.substring(0, i));
        }
        System.out.print(c);

And this will print the sequence you are looking for.

Upvotes: 0

John Kugelman
John Kugelman

Reputation: 361984

Let's say that str is "Code". We can perform some mental substitutions to see what happens to your loop.

  • str is "Code"
  • x is 4
  • str.charAt(0) is 'C'
  • str.charAt(x-1) is 'e'

Making these substitutions, your loop is:

for(char i = 'C'; i <= 'e'; i++)
{
    System.out.print(i);
}

Does this help you see the problem? I would think you'd have a loop from 0 to 3, not from 'C' to 'e'...

Upvotes: 1

rgettman
rgettman

Reputation: 178303

The char datatype can be treated as a number; you can increment it and manipulate it as a number.

What you really want is successive substrings of str to be printed. Loop over an int that will represent the ending position of the substring to be printed.

for (int i = 0; i < str.length(); i++)
{
    System.out.print(str.substring(0, i + 1));
}

The end index argument to substring is exclusive, which is why I added 1.

Upvotes: 3

Related Questions