我正在编写一个程序,它应该创建一个三角形并在三角形不合法的情况下抛出一个异常,这意味着任何一方的和必须大于剩余边的长度。该程序由4个类(超类GeometricObject、三角形类、Program6类和IllegalTriangleException类)组成。程序应该从一个文件中读取数据,该文件由每个边的长度、颜色以及是否填充,执行计算以确定周长和面积,并将信息写入名为方案6. of的文件。不过,我还没有实现对文件的写入,因为在实现IllegalTriangleException类之后,程序在使用常规print语句正确显示结果时遇到了一些问题。
下面是我到目前为止拥有的内容: GeometricObject类:
public class GeometricObject {
private String color = "white";
private boolean filled;
private java.util.Date dateCreated;
public GeometricObject() {
dateCreated = new java.util.Date();
}
public GeometricObject(String color, boolean filled) {
dateCreated = new java.util.Date();
this.color = color;
this.filled = filled;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public boolean isFilled() {
return filled;
}
public void setFilled(boolean filled) {
this.filled = filled;
}
public java.util.Date getDateCreated() {
return dateCreated;
}
public String toString() {
return "Created on: " + dateCreated + "\nColor: " + color + "\nFilled: " + filled;
}
}三角班:
public class Triangle extends GeometricObject {
private double side1;
private double side2;
private double side3;
private double s = (side1 + side2 + side3)/2;
private double area = Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
private double perimeter;
public Triangle() {
side1 = 1.0;
side2 = 1.0;
side3 = 1.0;
}
public Triangle(double side1, double side2, double side3) {
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
}
public double getSide1() {
return side1;
}
public double getSide2() {
return side2;
}
public double getSide3() {
return side3;
}
public double getPerimeter() {
return (side1 + side2 + side3);
}
public double getArea() {
this.s = (side1 + side2 + side3)/2;
this.area = Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
return area;
}
public String toString() {
return "Triangle: " + "\nSide 1: " + side1 + "\nSide2: " + side2 + "\nSide3: " + side3 + "\nArea: " + getArea() + "\nPerimeter: " + getPerimeter() + "\nColor: " + getColor() + "\nFilled: " + isFilled();
}
public void setSides(double newSide1, double newSide2, double newSide3) throws IllegalTriangleException {
if (side1 + side2 > side3){
if (side1 + side3 > side2)
if (side2 + side3 > side1)
side1 = newSide1;
side2 = newSide2;
side3 = newSide3;
}
else
throw new IllegalTriangleException(newSide1, newSide2, newSide3);
}
public Triangle(double side1, double side2, double side3, String color, boolean filled) throws IllegalTriangleException {
try {
setSides(getSide1(), getSide2(), getSide3());
}
catch(IllegalTriangleException ex) {
System.out.println("Illegal Triangle: The summ of any two sides must be greater than the other side" + side1 + "," + side2 + "," + side3);
}
}
}Program6类:
import java.util.Scanner;
public class Program6 {
public static void main(String[] args) throws Exception {
java.io.File file = new java.io.File("prog6.dat");
Scanner fin = new Scanner(file);
while (fin.hasNext()) {
double side1 = fin.nextDouble();
double side2 = fin.nextDouble();
double side3 = fin.nextDouble();
String color = fin.next();
String bool = fin.next();
boolean filled;
if(bool.equals("T"))
filled = true;
else
filled = false;
Triangle triangle = new Triangle(side1, side2, side3, color, filled);
System.out.println(triangle);
}
fin.close();
}
}IllegalTriangleException类:
public class IllegalTriangleException extends Exception {
private double side1;
private double side2;
private double side3;
public IllegalTriangleException() {
}
public IllegalTriangleException(double side1, double side2, double side3) {
super("Illegal Triangle: The summ of any two sides must be greater than the other side" + side1 + "," + side2 + "," + side3);
//this.side1 = side1;
//this.side2 = side2;
//this.side3 = side3;
}
public double getSide1() {
return side1;
}
public double getSide2() {
return side2;
}
public double getSide3() {
return side3;
}
}如果有帮助,下面是用于输入的文件:
1.0 1.5 1.0 yellow T
3.0 4.0 5.0 blue F
2.4 1.1 1.2 red T
3.1 6.2 8.5 green T
1.2 9.9 4.5 cyan F在添加异常类之前,程序正在正常工作,文件被正确读取,并将正确的值分配给变量,并且计算区域和周长是正确的,但是,现在我已经添加了异常类,下面是我的输出:
Illegal Triangle: The summ of any two sides must be greater than the other side1.0,1.5,1.0
Triangle:
Side 1: 0.0
Side2: 0.0
Side3: 0.0
Area: 0.0
Perimeter: 0.0
Color: white
Filled: false
Illegal Triangle: The summ of any two sides must be greater than the other side3.0,4.0,5.0
Triangle:
Side 1: 0.0
Side2: 0.0
Side3: 0.0
Area: 0.0
Perimeter: 0.0
Color: white
Filled: false
Illegal Triangle: The summ of any two sides must be greater than the other side2.4,1.1,1.2
Triangle:
Side 1: 0.0
Side2: 0.0
Side3: 0.0
Area: 0.0
Perimeter: 0.0
Color: white
Filled: false
Illegal Triangle: The summ of any two sides must be greater than the other side3.1,6.2,8.5
Triangle:
Side 1: 0.0
Side2: 0.0
Side3: 0.0
Area: 0.0
Perimeter: 0.0
Color: white
Filled: false
Illegal Triangle: The summ of any two sides must be greater than the other side1.2,9.9,4.5
Triangle:
Side 1: 0.0
Side2: 0.0
Side3: 0.0
Area: 0.0
Perimeter: 0.0
Color: white
Filled: false不知道我做错了什么,如果有人能帮我的话,我会非常感激的。这是我第一次使用这么多类,也是我第一次处理异常,所以请注意:-)
发布于 2014-07-30 01:24:21
有三个基本问题..。
首先..。
在Triangle构造函数中,将getSide1()、getSide2()和getSide3()传递给setSides方法.
public Triangle(double side1, double side2, double side3, String color, boolean filled) throws IllegalTriangleException {
try {
setSides(getSide1(), getSide2(), getSide3());这意味着,您只是将尚未设置的字段side1、side2和side3的值传递给0,这意味着您实际上在说.
setSides(0d, 0d, 0d);这需要更改以传递构造函数的参数,例如.
public Triangle(double side1, double side2, double side3, String color, boolean filled) throws IllegalTriangleException {
try {
setSides(side1, side2, side3);第二..。
您的setSides方法正在测试实例字段state1、state2和state3的状态,这些字段还没有被设置(甚至纠正了之前的错误)仍然默认为0...so 0 + 0 > 0 is . false
public void setSides(double newSide1, double newSide2, double newSide3) throws IllegalTriangleException {
if (side1 + side2 > side3){
if (side1 + side3 > side2)
if (side2 + side3 > side1)应该修改它以使用传递给方法的值,而不是.
public void setSides(double newSide1, double newSide2, double newSide3) throws IllegalTriangleException {
if (newSide1 + newSide2 > newSide3)
if (newSide1 + newSide3 > newSide2)
if (newSide2 + newSide3 > newSide1)第三..。
前面的if语句是错误的。这基本上等于说,如果一切都很好,设置side1 = newSide1,不管其他什么,分别将side2和side3设置为newSide2和newSide3 .
public void setSides(double newSide1, double newSide2, double newSide3) throws IllegalTriangleException {
if (newSide1 + newSide2 > newSide3)
if (newSide1 + newSide3 > newSide2)
if (newSide2 + newSide3 > newSide1)
side1 = newSide1;
side2 = newSide2;
side3 = newSide3;这就是为什么使用{...}非常重要,例如.
public void setSides(double newSide1, double newSide2, double newSide3) throws IllegalTriangleException {
if (newSide1 + newSide2 > newSide3) {
if (newSide1 + newSide3 > newSide2) {
if (newSide2 + newSide3 > newSide1) {
side1 = newSide1;
side2 = newSide2;
side3 = newSide3;
}
}
} else {
throw new IllegalTriangleException(newSide1, newSide2, newSide3);
}
}现在,问题是,只有在IllegalTriangleException时才会出现newSide1 + newSide2 > newSide3,这可以通过测试单个if语句中的每个条件来纠正,例如.
public void setSides(double newSide1, double newSide2, double newSide3) throws IllegalTriangleException {
if (newSide1 + newSide2 > newSide3 &&
newSide1 + newSide3 > newSide2 &&
newSide2 + newSide3 > newSide1) {
side1 = newSide1;
side2 = newSide2;
side3 = newSide3;
} else {
throw new IllegalTriangleException(newSide1, newSide2, newSide3);
}
}无意冒犯,但是一个好的IDE应该解决if语句的问题,调试器会帮助发现其他的问题.
额外的..。
Triangle构造函数正在窒息IllegalTriangleException,这意味着它永远不会抛给调用者.
public Triangle(double side1, double side2, double side3, String color, boolean filled) throws IllegalTriangleException {
try {
setSides(side1, side2, side3);(IllegalTriangleException ex) {
System.out.println("Illegal Triangle: The summ of any two sides must be greater than the other side" + side1 + "," + side2 + "," + side3);
}
}删除try-catch,让来电者处理.
public Triangle(double side1, double side2, double side3, String color, boolean filled) throws IllegalTriangleException {
setSides(side1, side2, side3);
}https://stackoverflow.com/questions/25027249
复制相似问题