2013-12-14 40 views
0

我有一個關於如何使用printf顯示布爾值的問題。就我而言,我認爲我唯一遇到的問題是用printf顯示布爾類型。我怎樣才能解決這個問題?任何幫助將不勝感激。當我運行我的程序,我得到這個:在布爾值上使用printf

run: 
_____________________________________________________________________________________________________________ 
        |  Household Waste Recycled  |  |   Pounds of CO2   | 
_____________________________________________________________________________________________________________ 
Index  People  Paper  Plastic  Glass  Cans  Total Emission ReductionNet Emission 

Exception in thread "main" java.util.IllegalFormatConversionException: f != CO2FromWaste 
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4045) 
at java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2761) 
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2708) 
at java.util.Formatter.format(Formatter.java:2488) 
at java.io.PrintStream.format(PrintStream.java:970) 
at java.io.PrintStream.printf(PrintStream.java:871) 
at CO2FromWasteTester.main(CO2FromWasteTester.java:55) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 0 seconds) 

下面是我的主要方法文件中的代碼:

import java.util.ArrayList; 

public class CO2FromWasteTester { 

public static void main(String args[]){ 

    ArrayList<CO2FromWaste> CO2 = new ArrayList<CO2FromWaste>(); 

    CO2.add(new CO2FromWaste(1, true, true, true, true)); 
    CO2.add(new CO2FromWaste(2, true, false, true, false)); 
    CO2.add(new CO2FromWaste(3, true, true, true, false)); 
    CO2.add(new CO2FromWaste(4, false, false, false, true)); 
    CO2.add(new CO2FromWaste(5, false, true, false, true)); 
    CO2.add(new CO2FromWaste(6, true, true, true, true)); 

    CO2FromWaste data; 

    for(int i = 0; i < CO2.size(); i++){ 
     data = CO2.get(i); 
     data.getNumberOfPeople(); 
     data.Paper(); 
     data.Plastic(); 
     data.Glass(); 
     data.Can(); 
     data.NetEmission(); 
     data.reduction(); 
     data.totalEmission(); 
    } 

    // create table headings 
    System.out.println("___________________________________________________" 
      + "__________________________________________________________"); 
    System.out.printf("%65s%44s%n", "|  Household Waste Recycled  |", 
      "|   Pounds of CO2   |"); 
    System.out.println("___________________________________________________" 
      + "__________________________________________________________"); 
    System.out.printf("%1s%12s%12s%12s%12s%12s%20s%12s%12s%n%n", "Index", "People", 
      "Paper", "Plastic", "Glass", "Cans", "Total Emission", "Reduction", 
      "Net Emission"); 

    // call methods 
    for(int i = 0; i < CO2.size(); i++){ 
     data = CO2.get(i); 
     System.out.printf("%1f%1f%5b%5b%5b%5b%4.2f%4.2f%4.2f", 
       data = CO2.get(i), 
       data.getNumberOfPeople(), 
       data.Paper(), 
       data.Plastic(), 
       data.Glass(), 
       data.Can(), 
       data.totalEmission(), 
       data.reduction(), 
       data.NetEmission()); 
    } 
} 

} 

回答

1

這是因爲你重複調用data = CO2.get(i),並且不能打印。試試這個:

for(int i = 0; i < CO2.size(); i++){ 
     data = CO2.get(i); 
     System.out.printf("%1f%1f%5b%5b%5b%5b%4.2f%4.2f%4.2f", 
       data.getNumberOfPeople(), 
       data.Paper(), 
       data.Plastic(), 
       data.Glass(), 
       data.Can(), 
       data.totalEmission(), 
       data.reduction(), 
       data.NetEmission()); 
} 
+0

+1,即將寫入相同。雖然沒有給出記錄的定義,但在這裏我沒有看到任何布爾類型。 – PMF

+0

雖然在這裏'6,真實,真實,真實'(二氧化碳數據)有布爾值,你說得對,它*不直接是一個布爾值。 – hichris123

+0

我的意思是說,輸出的標題看起來像是期待寫入浮動數據,也就是'data.Paper()'應該可能指示回收的紙張數量,而不僅僅是紙張是否被回收。 – PMF

0

考慮三元運算符的使用:

的printf:( 「%S」(真==值) 「真」 「假」?)