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.