日期:2014-05-20  浏览次数:20857 次

【输入求助帖】我写了一个关于根据读入参数不同判断的程序
本帖最后由 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坐标即可