Java String outputting as blank

I have an assignment where we have to make a Java program that will read 4 inputs from the user:

  • Integer
  • Double
  • Character
  • String

Then it outputs them in the above order in one line, and in reverse order in another line.

The inputs are

  • Integer: 99
  • Double: 3.77
  • Character: z
  • String: Howdy

However when they are outputted, the String is just blank

Expected results:

Enter integer: 
Enter double: 
Enter character: 
Enter string: 
99 3.77 z Howdy
Howdy z 3.77 99
3.77 cast to an integer is 3

Actual results:

Enter integer: 
Enter double: 
Enter character: 
Enter string: 
99 3.77 z 
 z 3.77 99
3.77 cast to an integer is 3

Here is the code that I have

import java.util.Scanner;

public class BasicInput {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      int userInt = 0;
      double userDouble = 0.0;
      
      // FIXME Define char and string variables similarly
      char myChar;
      String myString = "";
      
      System.out.println("Enter integer: ");
      userInt = scnr.nextInt();
      
      // FIXME (1): Finish reading other items into variables, then output the four values on a single line separated by a space
      System.out.println("Enter double: ");
      userDouble = scnr.nextDouble();
      
      System.out.println("Enter character: ");
      myChar = scnr.next().charAt(0);
      
      System.out.println("Enter string: ");
      myString = scnr.nextLine();
      
      
      System.out.println(userInt + " " + userDouble + " " + myChar + " " + myString);
   
      // FIXME (2): Output the four values in reverse
      System.out.println(myString + " " + myChar + " " + userDouble + " " + userInt);
      
      // FIXME (3): Cast the double to an integer, and output that integer
      System.out.println(userDouble + " cast to an integer is " + (int)userDouble);
      
      return;
   }
}

How do I get the String to show in the output? It is just displaying as an empty string. I’ve even tried to initialize the myString variable to "Hello", but it still displays empty.

>Solution :

The following should work.

You can request the input on the same line using System.out.print and you can use String.format to output the variables. Don’t forget to close the Scanner!

Note: When grabbing partial string input, you need to call scanner.nextLine() to dump the buffer, before requesting more string values.

import java.util.Scanner;

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

        // Inputs
        int userInt;
        double userDouble;
        char myChar;
        String myString;

        System.out.print("Enter integer: ");
        userInt = scanner.nextInt();

        System.out.print("Enter double: ");
        userDouble = scanner.nextDouble();

        System.out.print("Enter character: ");
        myChar = scanner.next().charAt(0);

        scanner.nextLine(); // Clear the buffer

        System.out.print("Enter string: ");
        myString = scanner.nextLine();

        // Output the four values in order
        System.out.printf("%d %.2f %s %s%n", userInt, userDouble, myChar, myString);

        // Output the four values in reverse order
        System.out.printf("%s %s %.2f %d%n", myString, myChar, userDouble, userInt);

        // Cast the double to an integer, and output that integer
        System.out.println(userDouble + " cast to an integer is " + (int) userDouble);

        scanner.close();
    }
}

Output

Enter integer: 99
Enter double: 3.77
Enter character: z
Enter string: Howdy
99 3.77 z Howdy
Howdy z 3.77 99
3.77 cast to an integer is 3

If you want to take all the inputs at once, you can do the following:

import java.util.Scanner;

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

        // Inputs
        int userInt;
        double userDouble;
        char myChar;
        String myString;

        System.out.print("Enter an integer, double, character, and a string: ");

        userInt = scanner.nextInt();
        userDouble = scanner.nextDouble();
        myChar = scanner.next(".").charAt(0); // See: https://stackoverflow.com/a/13942707/1762224
        myString = scanner.nextLine().trim();

        // Output the four values in order
        System.out.printf("%d %.2f %s %s%n", userInt, userDouble, myChar, myString);

        // Output the four values in reverse order
        System.out.printf("%s %s %.2f %d%n", myString, myChar, userDouble, userInt);

        // Cast the double to an integer, and output that integer
        System.out.println(userDouble + " cast to an integer is " + (int) userDouble);

        scanner.close();
    }
}

Output

Enter an integer, double, character, and a string: 99 3.77 z Howdy
99 3.77 z Howdy
Howdy z 3.77 99
3.77 cast to an integer is 3

If you want to be strict about which charcter can be entered, you can use a pattern:

myChar = scanner.next("[A-Za-z]").charAt(0); // Only alpha

Leave a Reply