我试图在 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();
}
}
}

不清楚你的问题。 你的意思是System.out.printf("%5d", num);如果intnum有效,但当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);

有关格式字符串用法 https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html,请参阅 Java API 文档

当我更改它时,它对我有用

final String IPQ_FMT_STR = "%5d";

对此

final String IPQ_FMT_STR = "%5s";

这是您得到的转换异常

假设数组是itemPQ,并且您尝试打印的数字在itemPQ[x][y],最好的方法是使用Double.toString(itemPQ[x][y])或使用此代码进行显式强制转换

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

您似乎使用的格式代码是不必要的,因为原始中显示的值最多精确到小数点后两位。

因为double扩展Object,这意味着它继承了toString()方法

相关内容

  • 没有找到相关文章

最新更新