【输入求助帖】我写了一个关于根据读入参数不同判断的程序
本帖最后由 qingling_1979 于 2013-04-27 09:36:37 编辑
这是题目:
编写一个程序,用于根据用户输入的命令行参数数量来计算长方形、正方形、三角形的面积。如果输入的参数为一个、二个、三个则它们应分别对应正方形、长方形、三角形,如果没有参数,则通过异常处理方法显示错误消息。??? 提示:定义一个抽象的父类,并提供一个抽象的方法area(). 再派生出三个子类,重写area()方法,然后在main方法中编写测试逻辑。
这是我编写的程序:
import java.util.*;
import java.math.*;
import java.io.*;
abstract class area{
abstract double getArea();
}
class Zfx extends area{
double a;
double getArea(){
return a*a;
}
void getA(double a){
this.a=a;
}
}
class Cfx extends area{
double a,b;
double getArea(){
return a*b;
}
void getA(double a,double b){
this.a=a;
this.b=b;
}
}
class Sjx extends area{
double a,b,c;
double getArea(){
double p=(a+b+c)/2.0;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
void getA(double a,double b,double c){
this.a=a;
this.b=b;
this.c=c;
}
}
class SRException extends Exception{
String message="输入参数错误。请重新输入。";
String warnMess(){
return message;
}
}
public class MianJi{
public static void main(String args[])throws SRException{
try { Scanner scanner=new Scanner(System.in);
int count=-1;
double Main=0;
Vector<Double> a=new Vector<Double>();
for(int i=0;scanner.hasNext();i++)
a.add(scanner.nextDouble());
/* scanner.nextLine();*/ //这行是后来加上去的。没起什么作用。
if(a.size()>3||a.size()<1) throw new SRException();
switch(a.size()){
case 1:Zfx zfx=new Zfx(); zfx.getA(a.elementAt(0));Main=zfx.getArea();break;
case 2:Cfx cfx=new Cfx(); cfx.getA(a.elementAt(0),a.elementAt(1));Main=cfx.getArea();break;
case 3:Sjx sjx=new Sjx(); sjx.getA(a.elementAt(0),a.elementAt(1),a.elementAt(2));Main=sjx.getArea();break;
}
System.out.println("图形面积为"+Main);
}
catch(SRException e){
System.out.println(e.warnMess());
}
}
}
编译通过,运行输入无法结束。求大神帮忙解下面2,3问题。感激不尽。
遇到问题:
三角形如何判断是否是合法三角形
如何结束输入
如果用抽象父类就利用上转型变量,而上转型变量只能调用父类或重写方法,而参数传递(参数个数不一样)如何使得上转型可以调用这个,抽象父类怎么写能解决参数不一的问题。
------解决方案--------------------1. 合法三角形三边不在一条直线上,所以只要看是不是有三个相同的x或y坐标即可