Home > Mobile >  Java Project Output
Java Project Output

Time:11-17

Hi im finishing a assignment however im getting the wrong output.

The goal of the project is to reverse a string

So its supposed to take in a line of text as input, and outputs that line of text in reverse. The program repeats, ending when the user enters "Done", "done", or "d" for the line of text.

Ex: If the input is:Hello there Hey done

the output is:ereht olleH yeH

import java.util.Scanner;

public class LabProgram {

    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        String str;
        while (true) {
            str = scnr.nextLine();
            if (str.equals("quit") || str.equals("Quit") || str.equals("q")) break;
            for (int i = 0; i < str.length(); i  ) {
                System.out.print(str.charAt(str.length() - i - 1));
            }
            System.out.println();
        }
    }
}

My current code is that however output is coming back as:

Input Hello there Hey done

Output ereht olleH yeH enod

Expected output ereht olleH

Cant figure out what im doing wrong.

CodePudding user response:

    /*
        I don't know what you know, so I am not sure how your professor
        wants you to complete this, but I will do what comes to mind for myself.
    */

    //Instead of while(true) I like to use do while, which runs once automatically, and continues running until a condition is met
    do {
        str = scnr.nextLine();
        int i = 0;

        //This isn't the cleanest way to solve this, especially because it doesn't remove the space before done.
        //You could add more if statements for that, but the cleanest way would be to split the words into a String array
        // and check if any of the values of the array equal done, and remove it before flipping it around
        if(str.toLowerCase().contains("done"))
            i = 4;
        else if(str.toLowerCase().contains("d"))
            i = 1;

        while (i < str.length()) {
            System.out.print(str.charAt(str.length() - i - 1));
            i  ;
        }
        System.out.println();
    }
    while (!str.toLowerCase().contains("done") || !str.toLowerCase().contains("d")); //This replaces that if statement from before

CodePudding user response:

you are using .equals() to check if the line is equal to one of your break words, but you are giving it the input Hello there Hey done, so it will not detect the the break word (ignoring the fact that you gave it done, not quit, I'm assuming that was a typo), so to detect that, you would either have to check if the line contains that word and if so, toggle a boolean and remove the word and any text after it from the line, e.g:

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    String str;
    boolean end = false;
    while (!end) {
        str = scnr.nextLine();
        if (str.contains("quit") || str.contains("Quit") || str.contains("q")) { // checks if str contains the word, so if you write "hello quit" it will still detect it.
            str = str.substring(0,str.toLowerCase().indexOf("q")); // cuts off the string from the q.
            end = true;
        }
        for (int i = 0; i < str.length(); i  ) {
            System.out.print(str.charAt(str.length() - i - 1));
        }
        System.out.println();
    }
}

otherwise, you would just need to add the quit to the line after, and then it would work, so you would put in Hello there Hey then press enter, and then quit, and that will work.

  • Related