简体   繁体   中英

String output only returning one word

This program runs just fine, but for some reason when I ask for an input for name it will only save the first word in the response. For example if I enter "Jon Snow" when I use it later for output it will only show "Jon".

import java.util.Scanner;

public class help 
{
public static void main (String[] args)
{
    Scanner input = new Scanner(System.in); //object for user input

    //constant
    final double tax = 0.08; //Sales tax

    //variables
    int choice;                 //menu selection/case switch
    String name;                //customer's name   
    String address;             //customer's address
    String email;               //customer's email address
    String item;                //item purchased
    double itemsPurchased;      //number of items purchased
    double itemPrice;           //price of item purchased
    double total;               //total for purchase
    double grandTotal;          //total + tax
    double taxAmount;           //tax of the purchase

    //Menu
    System.out.println("1. Enter Customer Information");
    System.out.println("2. Display Total Bill");
    System.out.println("3. Quit\n");                            
    System.out.print("Enter 1, 2, or 3 to make your selection: ");
    choice = input.nextInt();

    switch(choice){

    //Customer info

    case 1:

        //inputting info
        System.out.println("\nPlease enter the customers information.");

        //name
        System.out.print("Name: "); 
        name = input.next();
        input.nextLine();                                           

        //address
        System.out.print("Address: ");
        address = input.nextLine();

        //email
        System.out.print("Email Adress: ");
        email = input.next();
        input.nextLine();                                           

        //reading info back to user
        System.out.println("\nThe customer has successfully been added to our list with the following information: ");
        System.out.println("Name: " + name);
        System.out.println("Address: " + address);
        System.out.println("Emal: " + email);
        break;                      

    //Customer receipt  

    case 2:

        //name
        System.out.println("");                                     
        System.out.print("Enter customer's name: ");
        name = input.next();
        input.nextLine();                                           

        //name of item purchased
        System.out.print("Enter item purchased: ");
        item = input.next();
        input.nextLine();                                           

        //number of items purchased
        System.out.print("Number of items purchased: ");
        itemsPurchased = input.nextDouble();
        input.nextLine();                                           

        //price of item
        System.out.print("Price of item: ");
        itemPrice = input.nextDouble();
        input.nextLine();                                           

        //defining taxAmount, total, and grandTotal
        total = (itemPrice * itemsPurchased);
        taxAmount = (total*tax);
        grandTotal = total + taxAmount;

        //bill

        System.out.println("");                                                                         
        System.out.println(name);
        System.out.println("");                                                                         
        System.out.printf("%-20s %-15s %-15s\n", "Product Purchased", "Quantity", "Total Cost");            
        System.out.println("");
        System.out.printf("%-20s %-15s %-15s\n", item, itemsPurchased, total);
        System.out.println("");                                                                         
        System.out.printf("%-20s %-15s %-15s\n", "Tax(@8%):", "", taxAmount);
        System.out.printf("%-20s %-15s %-15s\n", "Total Cost:", "", grandTotal);

        break;                      

    //Quit

    case 3:

        System.out.println("End Program");
        break; //void

    //Default statement

    default:
        System.out.print("Invalid value entered.");

    }//end case

}//end main

}//end class
name = input.nextLine()

You are not reading the whole line but only the first word.

For the Scanner class, the next() function reads the next tokenized input while nextLine() retrieves the whole line until the carriage return ( \\n ).

Eg. "happy days again"
next() // "happy"
next() // "days"
next() // "again"

or,

nextLine() // "happy days again"

EDIT: Try the code below

input.nextLine(); // IMP: To get the carriage return after choice is typed
//name
System.out.println("");                                     
System.out.print("Enter customer's name: ");
name = input.nextLine();                                           

//name of item purchased
System.out.print("Enter item purchased: ");
item = input.nextLine(); 

Try this,

Using next() will give you the 1st Word , but if you want the whole line use nextLine() .

name = input.nextLine();

eg:

   Scanner scan = new Scanner(System.in);
   name = input.nextLine();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM