题目是这样的:若输入一个数,求圆的面积
若两个,求矩形面积
3个,三角形面积现在我只能用特殊符号‘#’判断是否到输入结束
我想改进一下,自动判断输入数字个数,然后调用相应函数求解
请大家指教,谢谢!我的代码import java.util.Scanner;
public class test
{

public static  void main(String[] args)
{
        Scanner   cin=new   Scanner(System.in);
        String[] num=new String[3];  
        double[] w=new double[3];  
        int i=0;
        boolean flag=false;
        while(i<3)
        {                                                    
     num[i]=cin.next();                                   //因为找不到删除字符的函数,所以将#替换成‘\0’(即空字符)
         if(num[i].indexOf('#')>0){num[i]=num[i].replace('#','\0');flag=true;}  //判断是否有#,若有,标记,且将#删掉
         w[i]=Double.parseDouble(num[i]);         
         i++;
         if(flag)break;              
        }
        switch(i)
        {
          case 1:System.out.println("圆面积为 "+ area(w[0]));break;
          case 2:System.out.println("矩形面积为 "+ area(w[0],w[1]));break;
          case 3:System.out.println("三角形面积为 "+ area(w[0],w[1],w[2]));break;
          default:break;
        }    }
   public static double area(double r){return(Math.PI * r * r);}
  public static double area(double m,double n){return(m*n);}
  public static double area(double a,double b,double c)
  {
      double p=(a+b+c)/2;
      return(Math.sqrt(p*(p-a)*(p-b)*(p-c)));
  }
}

解决方案 »

  1.   


    import java.util.Scanner;
    public class test {
    public static void main(String[] args)
    {
      Scanner cin=new Scanner(System.in);
      //这里是读入一行,这样改后在一行输入
      //项输入的参数,用一个或多个空格分隔
      
      //这里用nextLine来读取一行
      String str = cin.nextLine();
      //这是正则表达式,就是用一个或多个空格来分隔字符串
      String[] temp = str.split("\\s+");
      double d1,d2,d3;
      switch(temp.length) {
       case 1:
       d1 = Double.parseDouble(temp[0]);
       System.out.println("圆的面积为:" + area(d1));
       break;
       case 2:
       d1 = Double.parseDouble(temp[0]);
       d2 = Double.parseDouble(temp[1]);
       System.out.println("矩形的面积为:" + area(d1,d2));
       break;
       case 3:
       d1 = Double.parseDouble(temp[0]);
       d2 = Double.parseDouble(temp[1]);
       d3 = Double.parseDouble(temp[0]);
       System.out.println("三角形的面积为:" + area(d1,d2,d3));
       break;
       default:
       System.out.println("输入的参数个数不正确!");
       System.out.println("用法:java test param1 param2 param3");
       break;
      }
    }
      public static double area(double r){return(Math.PI * r * r);}
      public static double area(double m,double n){return(m*n);}
      public static double area(double a,double b,double c)
      {
    double p=(a+b+c)/2;
    return(Math.sqrt(p*(p-a)*(p-b)*(p-c)));
    }
    }在你的基础上简单的改写了一个,没有处理异常,所以输入的参数不是合法的数字的时候,会有问题!
      

  2.   


     d3 = Double.parseDouble(temp[2]);
    上面的程序有个小错误,上面是改正后的!
      

  3.   

    class area//可以用构造函数来实现!!
    {
    public area(double r)
    {
    System.out.println("圆面积为"+Math.PI*r*r);
    }
    public area(double a,double b)
    {
    System.out.println("矩形面积为"+a*b);

    }
    public area(double a,double b,double c)
    {
    double p=(a+b+c)/2;
    System.out.println("三角形面积为"+(Math.sqrt(p*(p-a)*(p-b)*(p-c))));
    }}
      

  4.   

    temp.length就是传入参数的个数,你没看懂嘛?
      

  5.   

    我建议你仔细看看,如果还不懂的话,就参考参考String类的split方法。