如果您运行此程序,您会注意到显示摄氏转换的表看起来很时髦。我一直试图做的是让它停在第十位。我真的很感激任何反馈。提前谢谢。
输出:
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
public class Foo extends Frame
{
public Foo()
{
setTitle(" Fahrenheit To Celsius Chart");
setSize(400, 600);
setVisible(true);
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
public static void main(String[] args)
{
Foo chart = new Foo();
}
public void paint (Graphics g)
{
for(int i = 0; i < 25; i++)
{
g.setColor(Color.BLACK);
g.setFont(new Font("SansSerif", Font.BOLD, 14 ));
g.drawString("Fahrenheit", 70, 110);
g.drawString("Celsius", 200, 110);
int[] tempF = new int[25];
int y = 100, x = 130;
int y1 = 215, x1 = 130;
tempF[0] = 0;
int counter = 0;
while(counter < 26)
{
int index = 0;
String Fahrenheit = String.valueOf(tempF[index]);
double tempC = (tempF[index] - 32) * (5/9.0);
String Celsius = String.valueOf(tempC);
String formatedCelcius = String.format("%.1f", tempC);
g.drawString(Fahrenheit, y, x);
g.drawString(Celsius, y1, x1);
x += 15;
x1 += 15;
tempF[index] += 10;
index++;
counter++;
}
}
}
}
答案 0 :(得分:1)
渲染温度的代码应如下所示:
String Fahrenheit = String.valueOf(tempF[index]);
double tempC = (tempF[index] - 32) * (5/9.0);
String formattedCelcius = String.format("%.1f", tempC);
g.drawString(Fahrenheit, y, x);
g.drawString(formattedCelcius, y1, x1);
在你的代码中,你做了:
String.format("%.1f", Celsius);
而不是:
String.format("%.1f", tempC);
(我希望区别很明显)
%f格式说明符需要Double参数(如tempC
),但您传入了一个字符串(Celsius
)
这会导致java.util.IllegalFormatConversionException: f != java.lang.String
(您可能没有看到异常被抛入Swing事件线程),这会中止paint
方法的其余部分。
答案 1 :(得分:0)
感谢大家的反馈意见。我找到了解决方案。 Math类有一个函数round()来完成这个技巧。我把它放进去并解决了这个问题:
double tempC = (tempF[index] - 32) * (5/9.0);
double c = Math.round(tempC);
更改后我得到了正确的输出:
再次感谢大家的反馈。
致以最诚挚的问候,
DDKGM