Java 方法计算在JTable中使用时出错,但在控制台中打印时正确
我编写了一个三角形程序,作为JAVA入门课程的作业。一切似乎都很好,除了a)我的一些数字在表中显示为正方形,b)我在表中调用的Java 方法计算在JTable中使用时出错,但在控制台中打印时正确,java,swing,jtable,Java,Swing,Jtable,我编写了一个三角形程序,作为JAVA入门课程的作业。一切似乎都很好,除了a)我的一些数字在表中显示为正方形,b)我在表中调用的getperiment()方法产生的结果与在System.out.println中调用的方法不一样语句。也许这两个问题来自同一个问题,我不确定。 以下是我相信来自我的Triangle.java的相关代码: public String getAngleA() { double a = sideA; double b = sideB; double c
getperiment()
方法产生的结果与在System.out.println中调用的方法不一样代码>语句。也许这两个问题来自同一个问题,我不确定。
以下是我相信来自我的Triangle.java的相关代码:
public String getAngleA()
{
double a = sideA;
double b = sideB;
double c = sideC;
angleA = Math.toDegrees(Math.acos((c*c + b*b - a*a) / (2 * b * c)));
return df.format(angleA);
}
public String getAngleB()
{
double a = sideA;
double b = sideB;
double c = sideC;
angleB = Math.toDegrees(Math.acos((a*a + c*c - b*b) / (2 * a* c)));
return df.format(angleB);
}
public String getAngleC()
{
angleC = 180 - (angleA + angleB);
return df.format(angleC);
}
public String getPerimeter()
{
perimeter = sideA + sideB + sideC;
return df.format(perimeter);
}
下面是我的TriangleTester.java中的所有代码,因为我不知道问题出在哪里:
Scanner in = new Scanner(System.in);
System.out.println("Enter X coordinate for the first corner of the triangle: ");
int x1 = in.nextInt();
System.out.println("Enter Y coordinate for the first corner of the triangle: ");
int y1 = in.nextInt();
System.out.println("Enter X coordinate for the second corner of the triangle: ");
int x2 = in.nextInt();
System.out.println("Enter Y coordinate for the second corner of the triangle: ");
int y2 = in.nextInt();
System.out.println("Enter X coordinate for the third corner of the triangle: ");
int x3 = in.nextInt();
System.out.println("Enter Y coordinate for the third corner of the triangle: ");
int y3 = in.nextInt();
Triangle myTri = new Triangle(x1, y1, x2, y2, x3, y3);
JFrame frame = new JFrame();
String[] columnName = {"SIDES", "ANGLES", "PERIMETER", "AREA"};
Object[][] data = {
{"The length your triangle on side A is: " + myTri.getSideA(),
"Angle A = " + myTri.getAngleA() + "\u00b0",
"The perimeter of your triangle is: " + myTri.getPerimeter(),
"The area of your triangle is: " + myTri.getArea()},
{"The length your triangle on side B is: " + myTri.getSideB(),
"Angle B = " + myTri.getAngleB() + "\u00b0",
" ", " "},
{"The length your triangle on side C is: " + myTri.getSideC(),
" Angle C = " + myTri.getAngleC() + "\u00b0",
" ", " "},
};
JTable table = new JTable(data, columnName);
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.LEFT );
table.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.getColumnModel().getColumn(2).setCellRenderer(centerRenderer);
table.getColumnModel().getColumn(3).setCellRenderer(centerRenderer);
frame.setSize(950,107);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Your Triangle");
frame.add(table.getTableHeader(),BorderLayout.PAGE_START);
frame.add(table);
System.out.println(myTri.getP1() + "\n" + myTri.getP2() + "\n" + myTri.getP3() + "\n");
System.out.println("The length of triangle on side A is: " + myTri.getSideA());
System.out.println("The length of triangle on side B is: " + myTri.getSideB());
System.out.println("The length of triangle on side C is: " + myTri.getSideC() + "\n");
System.out.println("Angle A is: " + myTri.getAngleA() + "\u00b0");
System.out.println("Angle B is: " + myTri.getAngleB() + "\u00b0");
System.out.println("Angle C is: " + myTri.getAngleC() + "\u00b0" + "\n");
System.out.println("Perimeter is: " + myTri.getPerimeter() +"\n");
System.out.println("Area is: " + myTri.getArea());
}
}
最后,这是一张图片,显示了表格的方块和错误的周长输出,在下面,你可以看到控制台打印出正确的数字,所以我知道我的方法是正确的。
我的问题是在运行getSides()
方法之前,在我的表中调用了getAngle()
方法,因此getAngle()
方法没有要使用的值。在我的命令行中,all可以打印出来,因为所有的方法都是按“顺序”运行的,所以getSides()
方法在我调用第一个getAngle()
方法之前都已经运行过了。以下是固定的相关代码:
double sideA = myTri.getSideA();
double sideB = myTri.getSideB();
double sideC = myTri.getSideC();
double angleA = myTri.getAngleA();
double angleB = myTri.getAngleB();
double angleC = myTri.getAngleC();
double perim = myTri.getPerimeter();
double area = myTri.getArea();
String[] columnName = {"SIDES", "ANGLES", "PERIMETER", "AREA"};
Object[][] data = {
{"Side A = " + df.format(sideA),
"Angle A = " + df.format(angleA) + "\u00b0",
"Perimeter = " + df.format(perim),
"Area = " + df.format(area)},
{"Side B = " + df.format(sideB),
"Angle B = " + df.format(angleB) + "\u00b0",
" ", " "},
{"Side C = " + df.format(sideC),
"Angle C = " + df.format(angleC) + "\u00b0",
" ", " "}
};
我将命令行输出与GUI输出混合使用的原因是,我的GUI输出无法工作,我需要一种方法来判断我的数字是否正确计算。显然,我不会提交或发布以这种方式运行的程序。事实上,这表明您的问题将减少混淆并获得更好的响应。您的表格模型应该包含数字数据,而不是描述性字符串。如果需要,渲染器将提供字符串。不要使用其他方法依赖结果时计算的值,例如,getAngleC
依赖于getAngleA
和getAngleB
中的计算,但它无法知道这些方法是否已被调用。这些方法应该返回double
,格式化结果是没有责任的……而且不要将命令行和GUI混合使用,这很烦人。。。