我的任务包括:我必须设计一个允许用户输入三角形数量的计算器。目标如下:
- 用户输入 x 个三角形
-计算机从我的 3 到 13 之间的数字列表中自动生成 3 个数字。
- 计算机在屏幕上显示这些数字。
-它决定数字是否代表有效三角形的边。(例如,5、5 和 13 不会创建三角形)。
-如果数字不代表有效的三角形,则显示错误消息
-如果数字有效,程序将确定并显示
a) 三角形的边分类 – 等边、等腰或斜角,以及
b) 三角形的角度分类 – 右、锐或钝
[这是我所做的,但似乎出了点问题,因为计算机只显示"急性"或"无效"。
public class triangle_creator extensions javax.swing.JFrame {
private static int side1 = (int) (11 * Math.random() + 3);
private static int side2 = (int) (11 * Math.random() + 3);
private static int side3 = (int) (11 * Math.random() + 3);
private static int userNum;
private static String userInput;
private void calculateButtonActionPerformed(java.awt.event.ActionEvent evt) {
//get number of triangles by user in amountInput field
userInput=amountInput.getText();
side1=Integer.parseInt(userInput);
side2=Integer.parseInt(userInput);
side3=Integer.parseInt(userInput);
//add all sides together
int sumTriangle= side1+ side2+ side3;
// generate error message
if(side1+ side2< side3){
outputArea.setText("Not valid");
}
else{
if (side1==side2 && side1==side3 && side2==side3 )
outputArea.setText("Equilateral");
if (sumTriangle==sumTriangle)
outputArea.setText("Isosceles");
if (side1!=side2&& side1!=side3&& side2!=side3)
outputArea.setText("Scalene");
if (side1*side1+ side2*side2==side3*side3){
outputArea.setText("Triangle is right");
}
else if (side3*side3< side1*side1+ side2*side2)
outputArea.setText("Triangle is acute");
else if (side3*side3> side1*side1+ side2*side2){
outputArea.setText("Triangle is obtuse");
}
else
outputArea.setText("Error");
}
如果你们能给我至少一个关于如何完成这项工作的提示,我将不胜感激。塔安克斯!!:)
你的问题是side1
、side2
和side3
都设置为相同的值,即Integer.parseInt(userInput)
返回的值。
在大多数情况下,接下来发生的事情是side1+ side2< side3
为假,因此代码进入else
块。 现在评估了很多条件,最终,side3*side3< side1*side1+ side2*side2
将被评估,结果证明是真的,所以"Triangle is acute"
显示。
但是,如果在字段中输入足够大的值,则在评估side1+ side2< side3
时可能会出现整数溢出 - 也就是说,side1 + side2
可能太大而无法放入int
字段,因此它将溢出为负值。 在这种情况下,此条件将为真,将显示"Not valid"
,并且永远不会输入else
块。