字符串输出只返回一个单词

时间:2012-06-18 02:17:31

标签: java java.util.scanner

这个程序运行得很好,但出于某种原因,当我要求输入名称时,它只会保存响应中的第一个单词。例如,如果我在稍后使用它输入“Jon Snow”时输出它只会显示“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

2 个答案:

答案 0 :(得分:5)

name = input.nextLine()

你不是在阅读整行,而只是第一个单词。

对于Scanner类,next()函数读取下一个标记化输入,而nextLine()检索整行,直到回车(\n)。

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

or,

nextLine() // "happy days again"

编辑:请尝试以下代码

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(); 

答案 1 :(得分:0)

试试这个,

使用next()会为您提供1st Word,但如果您需要whole line use nextLine()

name = input.nextLine();

例如:

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