2011-10-02 17 views
6

मैं अपने सूची कार्यक्रम संकलन में सफल रहे हैं:MissingFormatArgumentException त्रुटि

// Inventory.java part 1 
// this program is to calculate the value of the inventory of the Electronics Department's cameras 

import java.util.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.io.*; 

public class Inventory 
{ 
    public static void main(String[] args) 
    { 
     // create Scanner to obtain input from the command window 
     Scanner input = new Scanner (System.in); 

     String name; 
     int itemNumber; // first number to multiply 
     int itemStock; // second number to multiply 
     double itemPrice; // 
     double totalValue; // product of number1 and number2 



    while(true){  // infinite loop 
       // make new Camera object 

     System.out.print("Enter Department name: "); //prompt 
     String itemDept = input.nextLine(); // read name from user 

      if(itemDept.equals("stop")) // exit the loop 
      break; 


{ 
System.out.print("Enter item name: "); // prompt 
name = input.nextLine(); // read first number from user 
input.nextLine(); 


    } 

System.out.print("Enter the item number: "); // prompt 
itemNumber = input.nextInt(); // read first number from user 
input.nextLine(); 
    while(itemNumber <= -1){ 
System.out.print("Enter valid number:"); // prompt 
itemNumber = input.nextInt(); // read first number from user input.nextLine(); 
} /* while statement with the condition that negative numbers are entered 
user is prompted to enter a positive number */ 

System.out.print("Enter number of items on hand: "); // prompt 
itemStock = input.nextInt(); // read first number from user 
input.nextLine(); 
    while(itemStock <= -1){ 
System.out.print("Enter positive number of items on hand:"); // prompt 
itemStock = input.nextInt(); // read first number from user 
input.nextLine(); 
} /* while statement with the condition that negative numbers are entered 
user is prompted to enter a positive number */ 

System.out.print("Enter item Price: "); // prompt 
itemPrice = input.nextDouble(); // read second number from user 
input.nextLine(); 
    while(itemPrice <= -1){ 
System.out.print("Enter positive number for item price:"); // prompt 
itemPrice = input.nextDouble(); // read first number from user 
input.nextLine(); 
} /* while statement with the condition that negative numbers are entered 
user is prompted to enter a positive number */ 


Cam camera = new Cam(name, itemNumber, itemStock, itemPrice); 

totalValue = itemStock * itemPrice; // multiply numbers 

System.out.println("Department name:" + itemDept); // display Department name 
System.out.println("Item number: " + camera.getItemNumber()); //display Item number 
System.out.println("Product name:" + camera.getName()); // display the item 
System.out.println("Quantity: " + camera.getItemStock()); 
System.out.println("Price per unit" + camera.getItemPrice()); 
System.out.printf("Total value is: $%.2f\n" + totalValue); // display product 

     } // end while method 

    } // end method main 

}/* end class Inventory */ 

class Cam{ 

private String name; 
private int itemNumber; 
private int itemStock; 
private double itemPrice; 
private String deptName; 

public Cam(String name, int itemNumber, int itemStock, double itemPrice) { 
this.name = name; 
this.itemNumber = itemNumber; 
this.itemStock = itemStock; 
this.itemPrice = itemPrice; 
    } 

    public String getName(){ 
     return name; 
     } 



    public int getItemNumber(){ 
    return itemNumber; 

} 

    public int getItemStock(){ 
    return itemStock; 

} 

    public double getItemPrice(){ 
    return itemPrice; 

} 

} 

C: \ जावा> जावा इन्वेंटरी
विभाग नाम दर्ज करें: कैमरा
आइटम दर्ज करें: इलेक्ट्रॉनिक्स
वस्तु का नाम प्रविष्ट संख्या: 12345
हाथों पर आइटमों की संख्या दर्ज करें: 8
आइटम दर्ज करें मूल्य: 100.50
विभाग नाम ई: इलेक्ट्रॉनिक्स
आइटम नंबर: 12345
उत्पाद का नाम: कैमरा
मात्रा: 8
मूल्य unit100.5 प्रति
कुल मूल्य का आशय है:
धागा "मुख्य" java.util.MissingFormatArgumentException में $ अपवाद:
स्वरूप निर्दिष्टकर्ता '.2f'
java.util.Formatter.format (अज्ञात स्रोत)
java.io.PrintStream.format पर (अज्ञात स्रोत)
java.io.PrintStream.printf पर (अज्ञात स्रोत)
पर इन्वेंटरी.माइन पर(इन्वेंटरी.जावा:82)

मुझे लगता है कि इस प्रारूप में त्रुटि आ रही है और क्यों नहीं देख सकता।

उत्तर

19

यदि आप printf का उपयोग कर रहे हैं, तो आपको प्रारूप स्ट्रिंग के साथ प्लेसहोल्डर्स को printf पैरामीटर के रूप में निर्दिष्ट करने की आवश्यकता है। आपके मामले में आप राशि को जोड़कर एक ही स्ट्रिंग पास कर रहे हैं इसलिए त्रुटि। -

System.out.printf("Total value is: $%.2f\n" + totalValue) 

System.out.printf("Total value is: $%.2f\n", totalValue) 
+2

स्ट्रिंग.फॉर्मैट() का उपयोग करते समय भी टाइप विनिर्देशकों के साथ% s की तरह होता है – javaProgrammer

6

यह समस्या है:

System.out.printf("Total value is: $%.2f\n" + totalValue); 

मुझे लगता है कि आप का मतलब:

System.out.printf("Total value is: $%.2f\n", totalValue); 

दूसरे शब्दों में, प्रारूप स्ट्रिंग के भेजने के लिए मूल्य जोड़ने के लिए स्ट्रिंग कॉन्सटेनेशन का उपयोग करने के बजाय प्लेसहोल्डर को प्रतिस्थापित करने के लिए मान निर्दिष्ट करें।

सामान्य रूप से, जब आपको कोई अपवाद मिलता है जिसे आप समझ में नहीं आता है, तो आपको इसके लिए प्रलेखन देखना चाहिए। इस मामले में, docs are reasonably clear:

अनियंत्रित अपवाद है जब वहाँ एक फॉर्मेट स्पेसिफायर जो एक इसी तर्क नहीं है या एक तर्क सूचकांक एक तर्क जो मौजूद नहीं है को संदर्भित करता है, तो है।

तो दो चीजें आप अपने कोड में जाँच करने के लिए की जरूरत है:

  • आप एक इसी तर्क के बिना एक फॉर्मेट स्पेसिफायर है?
  • क्या आपके पास एक तर्क अनुक्रमणिका है जो एक तर्क को संदर्भित करती है जो मौजूद नहीं है?

आपने अपनी प्रारूप स्ट्रिंग में कोई भी तर्क अनुक्रमणिका निर्दिष्ट नहीं की है, इसलिए यह पहला मामला होना चाहिए - जो वास्तव में है।