2015-06-21 55 views
1

我不能得到變量adjustedCharge打印出(文本打印,但沒有值)我試圖追蹤,但仍然無法讓它正確打印。也沒有錯誤。無法獲得一個java變量來打印

import java.util.Scanner; 
public class Assignment { 

    public static void main(String[] args) { 
     //Declare scanner 
     Scanner input = new Scanner(System.in); 
     //Prompt for information 
     System.out.print("Customer's name:"); 
     String name = input.nextLine(); 

     System.out.print("Customer's address:"); 
     String address = input.nextLine(); 

     System.out.print("Customer's phone number:"); 
     String phone = input.nextLine(); 

     System.out.print("Customer's licence number:"); 
     String licence = input.nextLine(); 

     System.out.print("Customer's credit card number:"); 
     String ccard = input.nextLine(); 

     System.out.print("Credit card expiry date (MM/YYYY):"); 
     String expiry = input.nextLine(); 

     System.out.print("Hire length (in days):"); 
     int hire = Integer.parseInt(input.nextLine()); 

     System.out.print("Make/Model:"); 
     String model = input.nextLine(); 

     System.out.print("Registration of car:"); 
     String rego = input.nextLine(); 

     System.out.print("Hire rate (per day) Either S, M, L:"); 
     char inputRate = input.nextLine().charAt(0); 

     System.out.print("Total days hired out:"); 
     int totalDays = Integer.parseInt(input.nextLine()); 
     // 
     double dtotalDays = totalDays; 

     double surcharge = dtotalDays - hire; 

     //Daily hire rate/Stage 2 
     double rate = 0; 

     if (inputRate == 'S' || inputRate == 's'){ 
      rate = (char) 80.0; 
      }   
     if (inputRate == 'M' || inputRate == 'm'){ 
      rate= 110.0; 
     } 
     if (inputRate == 'L' || inputRate == 'l'){ 
      rate= 140.0; 
     } 


     //Calculate late fees 
     double penalty = rate * (surcharge * 2); 


     //Start Stage 3 
     double dCost=0; 
     double tCost=0; 

     StringBuilder dDetail = new StringBuilder("The damage Details are:" + "\n"); 
     StringBuilder tDetail = new StringBuilder("The traffic fines are:" + "\n"); 

     //Setup an exit statement 
     boolean quit = false; 

     while (!quit){ 

      System.out.println("<<<Enter one of the following commands:>>>"); 
      System.out.println("A - Damage Repair"); 
      System.out.println("B - Traffic Infringement"); 
      System.out.println("X - Exit Menu"); 

      String schoiceEntry = input.next(); 
      char choiceEntry = schoiceEntry.charAt(0); 
      //Integer.parseInt(input.nextLine()); 
      double damageCost = 0; 

      switch (choiceEntry){ 
       case 'A': 
       case 'a': 
         input.nextLine(); 
         System.out.println("Enter a description of the damage:"); 
         String damageDetail = input.nextLine(); 
         System.out.println("Enter the damage cost:"); 
         damageCost = input.nextInt(); 
         System.out.print("The damage is: " + damageDetail + "\n"); 
         System.out.print("The damage cost is: " + "$" + damageCost + "\n"); 
         dDetail.append("-" + damageDetail + "\n"); 
         dCost = dCost + damageCost; 
         System.out.println("----------------------------------"); 
       break; 
       case 'B': 
       case 'b': 
         input.nextLine(); 
         System.out.print("Enter a description of the traffic infringement:"); 
         String trafficDetail = input.nextLine(); 
         System.out.println("Enter the traffic infringement cost:"); 
         double trafficCost = Integer.parseInt(input.nextLine()); 
         tDetail.append("-" + trafficDetail + "\n"); 
         tCost = tCost + trafficCost; 
         System.out.println("----------------------------------"); 
       break; 
       case 'X': 
       case 'x': 
         quit = true; 
         System.out.print("***Menu entry has been terminated***" + "\n"); 
         //System.out.printf("Total traffic cost is: %75s\n", "$" + tCost + "\n"); 
         //System.out.printf("Total Damage cost is: %77s\n", "$" + dCost + "\n"); 
         //System.out.printf(tDetail + "\n"); 
         //System.out.print(dDetail + "\n"); 
       break; 

       default: 
         System.out.print("Please enter either a valid menu selection (A, B, or X):" + "\n"); 
       break; 
      } 

     } 

     double dhire = hire; 
     double charge = dhire*rate; 
     double adjustedCharge = charge + penalty; 


     //Print summary 
     System.out.println("---------------------------------------------"+ 
       "------------------------------------------------------\n" + 
     "***CUSTOMER DETAILS:***\n"); 
     System.out.printf("Name: %93s\n", name); 
     System.out.printf("Address: %90s\n", address); 
     System.out.printf("Phone Number: %85s\n", phone); 
     System.out.printf("Licence Number: %83s\n", licence); 
     System.out.printf("Credit Card Number: %79s\n", ccard); 
     System.out.printf("Credit Card Expiry: %79s\n", expiry); 
     System.out.println("\n***CAR HIRE DETAILS:***\n"); 
     System.out.printf("Make/Model: %87s\n", model); 
     System.out.printf("Registration Number: %78s\n", rego); 
     System.out.printf("Hire Length (days): %79s\n", model); 
     System.out.printf("Daily Hire Rate: %82s\n", rate); 


     System.out.printf("Basic Hire Charge: %80s\n\n", charge); 
     System.out.printf("Days hired: %87s\n", totalDays); 

     if (totalDays == hire){ 
     System.out.printf("Late Return Surcharge: %76s\n", "$0.00"); 
     } 
     if (totalDays > hire){ 
     System.out.printf("Late Return Surcharge: %76s\n", + penalty); 
     } 




     System.out.printf("Adjusted Hire Charge: %77s\n", "\n", "$" + adjustedCharge + "\n"); 
     System.out.print(dDetail + "\n"); 
     System.out.printf("Total damage cost is: %78" + "s\n", "$" + dCost + "\n"); 
     System.out.printf(tDetail + "\n"); 
     System.out.printf("Total traffic fines incurred: %70s\n", "$" + tCost + "\n"); 
     System.out.printf("Final hire charge: %79s\n", "$" + (adjustedCharge + dCost + tCost)); 

    } 

} 
+0

如果你要使用'printf',你應該知道它是如何工作的,以及''''符號的意義是什麼。通常,每當在格式字符串中看到'%'符號時,格式字符串後應該有一個匹配的參數。在這裏的違規行中,格式字符串中只有一個'%',因此只會使用其中一個後續參數,最後一個參數將被忽略。當然,一般規則有例外,但在這種情況下,這就是你的問題所在。 –

回答

2

我只是改變了你打印出來的adjustedCharge所以你仍然可以用printf

System.out.printf("Adjusted Hire Charge: %77s","$"); 
    System.out.printf("%.1f",adjustedCharge); 
    System.out.printf("\n"); 

但使用printf您需要格式化你打印的價值,在這種情況下的方式,因爲你」重新嘗試打印一個雙重的,你需要格式化與%f

我也注意到,我以前的答案搞砸了你的輸出其餘部分的間距。所以這裏是固定的解決方案!只要改變了間距,但是你會喜歡

+2

在此展開更多;爲什麼在進行這種打印時必須使用'f'。此外,演員陣容是不必要的,因爲'adjustCharge'是一個「雙」的開始。 – Makoto

+0

是的,謝謝你做出的改變! – Mark

+0

謝謝,幫了很多! –

0

或者你可以

使用 傳遞兩個參數給printf

System.out.printf("Adjusted Hire Charge: %77s\n", "$" + adjustedCharge + "\n") 

代替

System.out.printf("Adjusted Hire Charge: %77s\n", "\n", "$" + adjustedCharge + "\n");