2012-06-18 5 views
1

Эта программа работает нормально, но по какой-то причине, когда я прошу ввести имя для имени, она сохранит только первое слово в ответе. Например, если я вхожу в «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 

ответ

4
name = input.nextLine() 

Вы не читаете всю строку, а только первое слово.

Для Scanner класса, функция next() читает следующий вход разбивается на лексемы, а nextLine() извлекает всю линию до возврата каретки (\n).

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

or, 

nextLine() // "happy days again" 

EDIT: Попробуйте этот код

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

Спасибо за помощь. Но у меня все еще проблема. Всякий раз, когда я его компилирую, он сохраняет фамилию как строку «item». – user1462585

+0

Сделал трюк! Спасибо тонну :) – user1462585

+0

Отлично! Получайте удовольствие от обучения! – vellvisher

0

Попробуйте это,

Использование next() даст вам 1st Word, но если вы хотите whole line use nextLine().

name = input.nextLine(); 

например:

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

Предложение не является правильным словом для его описания. – nhahtdh

Смежные вопросы