2016-12-14 3 views
0

Я просто не могу получить числа с десятичными знаками для отображения, и я пытаюсь отобразить его с помощью массив размером 2. Можно ли это сделать?Im пытается отобразить цену и количество некоторых элементов с массивами на 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(); 
    } 
} 

Это второй класс с методами. Массив, отображаемый, когда я сделал itemPQ в int, но когда я делаю его двойным, он, кажется, перестает работать.

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

Предполагая, что массив itemPQ, и номер, который вы пытаетесь напечатать это на itemPQ[x][y], он лучший способ либо использовать Double.toString(itemPQ[x][y]) или сделать явное приведение с помощью этого кода

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

код форматирования, который вы, кажется, используете, не нужен, так как значения, показанные в оригинале, точны с максимальным значением в два десятичных знака.

Поскольку double расширяет Object, это означает, что он наследует метод

+0

Вы уверены, что можете использовать 'double' для' String' в Java? –

0

Он работал для меня, когда я изменил эту

final String IPQ_FMT_STR = "%5d"; 

к этому

final String IPQ_FMT_STR = "%5s"; 

Это было исключение преобразования toString() вы получали

+0

Ну, на самом деле он не форматирует двойной. Использование «% s» на самом деле просит форматировать, чтобы сначала преобразовать аргумент в «String», а затем отформатировать его как «String», а «% f» обрабатывает аргумент как «Double». Вы увидите разницу между 'System.out.printf («% 10s \ n », 12.3);' и 'System.out.printf («% 10f \ n », 12.3);' –

+0

Да, вы правы и я оцените объяснение, но я просто оставил его так (string), так как они просто хотели, чтобы он отображался с десятичными знаками. –

+0

Все еще неправильно. Если вы хотите десятичное число, сделайте что-то вроде «% 10.6f». Использование «% s» для форматирования чисел с плавающей запятой редко является правильным выбором –

1

Непонятно по вашему вопросу. Вы имеете в виду, System.out.printf("%5d", num); работает, если num is int, но не тогда, когда num есть double правый?

Просто потому, что %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 Doc для использования строки формата https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html