2016-12-14 3 views
0

小数点以下の数字は表示できません。 2次元の配列それは可能ですか?私はJavaで配列を持ついくつかのアイテムの価格と数量を表示しようとしていますが、小数点を含む数字を表示させることはできません

import java.util.ArrayList; 

public interface VendingMachineDriver 
{ 
    public static void main(String[] args) 
    { 
     double [][] itemPQ = 
     { 
      {1.25, 20}, //Lays Chips 
      {1.25, 20}, //Sun Chips 
      {1.25, 15}, //Cheetos Chips 
      {1.25, 15}, //Fritos Chips 
      {1.25, 20}, //Doritos Chips 
      {1.75, 16}, //Popcorn 
      {1.75, 20}, //Ruffles 
      {1.75, 14}, //Cookie 
      {1.50, 9}, //Reese's 
      {1.50, 15}, //KitKat 
      {1.50, 20}, //Snickers 
      {1.50, 20}, //m&m's 
      {2.00, 20}, //Donuts 
      {2.00, 20}, //Pretzels 
      {2.00, 10}, //Cheez-it 
      {2.00, 15} //Chex Mix 
     }; 
     String[] itemNumbers = {"A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4", "D1", "D2", "D3", "D4"}; 
     String[] itemDisplay = {"Price", "Quantity"}; 
     VendingItem vi = new VendingItem(itemPQ, itemNumbers, itemDisplay); 

     vi.displayItem(); 
    } 
} 

これはメソッドを持つ2番目のクラスです。 itemPQをintにしたときに配列が表示されますが、二重にすると作業が停止するようです。

配列が itemPQあり、そしてあなたは、印刷しようとしている数が itemPQ[x][y]であり、彼の最善の方法は、このコードを使用して Double.toString(itemPQ[x][y])を使用するか、明示的なキャストを作る

String output = (String) itemPQ[x][y] 
System.out.print(output); 

のどちらかであると仮定すると

import java.util.Scanner; 

public class VendingItem 
{ 
    private double[][] itemPQ; 
    private String[] itemNumbers; 
    private String[] itemDisplay; 
    String item; 
    double quantity; 
    double cost; 
    double cost1; 
    double quantity1; 
    public VendingItem(double[][] pq, String[] n, String[] d) 
    { 
     itemPQ = pq; 
     itemNumbers = n; 
     itemDisplay = d; 
    } 

    //************************************************************************************************ 

    public VendingItem setItem(String item, double quantity, double cost) 
    { 
     this.item = item; 
     this.quantity = quantity; 
     this.cost = cost; 
     return this; 
    } 

    //************************************************************************************************ 

    public void displayItem() 
    { 
     final String NUM_FMT_STR = "%5s"; 
     final String IPQ_FMT_STR = "%5d"; 
     final String DISP_FMT_STR = "%5s"; 
     System.out.printf(DISP_FMT_STR, ""); 
     for (int col=0; col<itemDisplay.length; col++) 
     { 
      System.out.printf(DISP_FMT_STR, itemDisplay[col]); 
     } 
     System.out.println(); 
     for (int row=0; row<itemPQ.length; row++) 
     { 
      System.out.printf(NUM_FMT_STR, itemNumbers[row]); 
      for (int col=0; col<itemPQ[0].length; col++) 
      { 
      System.out.printf(IPQ_FMT_STR, itemPQ[row][col]); 
      } 
      System.out.println(); 
     } 
    } 
} 
+1

を参照してください、「動作を停止しているようですか」?例外をスローしますか、エラーですか?期待通りのフォーマットでは印刷されませんか? –

答えて

-1

使用しているように見える書式設定コードは不要です。元の値は小数点以下2桁まで正確です。 doubleObjectを拡張

ので、これはこれは、変換例外だった私は、この

final String IPQ_FMT_STR = "%5s"; 

にこの

final String IPQ_FMT_STR = "%5d"; 

を変更したときにそれは私のために働い

+0

Javaで 'double'を' String'にキャストできますか? –

0

toString()メソッドを継承する意味しますあなたは得ていた

+0

さて、実際にはダブルをフォーマットしません。 "%s"を使用すると、実際に引数を 'String'に変換し、それを' String'としてフォーマットするようにフォーマッタに依頼していますが、 "%f"は引数を 'Double'として扱います。 'System.out.printf("%10s \ n "、12.3);'と 'System.out.printf("%10f \ n "、12.3);' –

+0

の違いは正しいと思います。説明をありがとうが、私はちょうどそれが小数で表示されたかったので、(文字列)のようにそれを残しました。 –

+0

まだ間違っています。小数点を使用する場合は、 "%10.6f"のようにします。浮動小数点数のフォーマットに "%s"を使用することはめったに正しい選択ではありません –

1

あなたの質問には不明です。 は、numintの場合に表示されますが、numdoubleの場合は正しく表示されません。

単純に%dは整数をフォーマットするためのものです。浮動小数点数のフォーマットに使用する場合は、java.util.IllegalFormatConversionExceptionが返されます。浮動小数点数をフォーマットするには、代わりに%fを使用してください。すなわち

System.out.printf("%5f", aFloatNum); 
// or the following, which give similar result as %5d 
System.out.printf("%5.0f", aFloatNum); 

あなたは何を意味するのフォーマット文字列の使用のためのJava APIドキュメントにhttps://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

関連する問題