中易网

java代码修改

答案:4  悬赏:70  
解决时间 2021-04-28 02:47

要求和源码如下,未能得出要求的结果:

package My_exercise;

import java.util.Scanner;
import java.util.regex.Pattern;
import java.io.IOException;

public class myDivision {
 
 private static double divisor ;// 被除数
 private static double dividend   ; //除数
 private static double stmp;     
 
 public static double dataInput( ){
  try{
   Scanner sc=new Scanner(System.in);
   stmp = sc.nextDouble();
  }
  catch(Exception e){
   System.err.println("dataInput()方法异常"+e.getMessage());
   e.printStackTrace();
  }
  isdoubleNumber();//判断是否为浮点数
  return stmp;  
 }
 
 //正则表达式判断是否为浮点数
 public static void isdoubleNumber() {
        //检查一个字符串是否是浮点小数,浮点小数至少一个数字开头,允许一个正负符号位
        //中间只出现一个小数点,小数点之后至少一个数字
  String aString =String.valueOf(stmp);//将输入值转化成字符串型
  boolean judge;
        if (aString == null || aString.length() < 1) {
            System.out.println("没有输入!请输入:");
            dataInput();
        }

        Pattern isDoubleNum = Pattern.compile("^[+-]?[\\d]+\\.[\\d]+$");
        judge=isDoubleNum.matcher(aString).find();
        if(judge==false){
         System.out.println("输入有误,要重新输入:");
         dataInput();
        }
        else{
         System.out.println("输入没问题!");
        }
    }

 
 //按要求做除法
 public static void division(){
  System.out.println("这里是输入被除数:");
   try{
    dividend = dataInput();
    
   }
   catch(Exception e){
    System.err.println("被除数输入不对:" + e.getMessage());
    e.printStackTrace();
   }
   System.out.println("要重新输入被除数:");
   dividend = dataInput();
  
  System.out.println("这里是输入除数:");
  divisor = dataInput();
  while(divisor==0){
   System.out.println("除数为零!----->要重新输入:");
   try{
   divisor = dataInput();
   }
   catch(Exception e){
    System.err.println("division()方法中divisor输入数据异常"+e.getMessage());
    e.printStackTrace();
   }
   divisor = dataInput();
  }
  
  System.out.println("********************************************");
  System.out.println("dividend/divisor的结果为:"+dividend/divisor);
 }
 
 

 public static void main(String[] args){
  myDivision md = new myDivision();
  md.division();
 }
}

 

最佳答案

import java.util.Scanner;



public class Test {
 static boolean flag = false;
 
 public static double dataInput(){
  double stmp = 0;
  flag = false;
  try {
   Scanner sc = new Scanner(System.in);
   stmp = sc.nextDouble();
  } catch (Exception e) {
   flag = true;
   System.out.println("输入数据类型错误!请重新输入!");
   stmp = 0;
  }
  return stmp;
 }
 
 public static double division(double d1,double d2){
  double temp = 0;
  flag = false;
  try {
   temp = d1/d2;
  } catch (Exception e) {
   flag = true;
   System.out.println("除数不能为0");
   temp = 0;
  }
  return temp;
 }
 
 public static void main(String[] args) {
  double d1 = 0;
  double d2 = 0;
  while(true){
   System.out.println("----------开始-----------");
   do{
    System.out.print("请输入除数:");
    d1 = dataInput();
   }while(flag);
   
   do{
    System.out.print("请输入被除数:");
    d2 = dataInput();
   }while(flag);
   System.out.println("运算结果为:"+division(d1, d2));
  }
 }
}

全部回答

可以通过四个方法实现。

public boolean isNumber(String number);  //验证是否为数字

public boolean isDoubleNumber(String number); //验证是否浮点数

public Double StringToNumber(String number) ; //字符串转换为浮点数

public Double getNumber(Double number1,Double number2); 获取两个数的商

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;

class Divisor extends Exception{  public Divisor(){   super("除数不能为0");  } } public class T1a {  public void fun() throws Divisor{   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   double divisor = 0;   double dividend = 0;      try{    System.out.println("请输入除数:");    divisor = Double.parseDouble(br.readLine());    System.out.println("请输入被除数:");    dividend = Double.parseDouble(br.readLine());    if(divisor == 0){    //如果除数等于0则抛出异常     throw new Divisor();    }    else{     System.out.println(divisor + "/" + dividend + "=" + (divisor/dividend));    }   }   catch(NumberFormatException nfe){    nfe.printStackTrace();   }   catch(IOException ioe){    ioe.printStackTrace();   }  }  public static void main(String[] args) {   try {    new T1a().fun();   }   catch (Divisor e) {    e.printStackTrace();   }  } }

初学者,没用Scanner...不知道对你有帮助否.

有两个的问题:

1.输入的时候,你还不知道人家输入的是不是数字呢,怎么能用 sc.nextDouble()来获取浮点数呢?

2.那个判断数字的正则表达式好像有点问题

改后的代码如下(类名稍微改了一下,无碍):

import java.util.Scanner; import java.util.regex.Pattern;

public class Ask {  private static double divisor;// 被除数

 private static double dividend; //除数

 private static String stmp;

 public static double dataInput()  {   try   {    Scanner sc = new Scanner(System.in);    stmp = sc.nextLine();   }   catch (Exception e)   {    System.err.println("dataInput()方法异常" + e.getMessage());    e.printStackTrace();   }   isdoubleNumber();//判断是否为浮点数   return Double.parseDouble(stmp);  }

 //正则表达式判断是否为浮点数  public static void isdoubleNumber()  {   //检查一个字符串是否是浮点小数,浮点小数至少一个数字开头,允许一个正负符号位   //中间只出现一个小数点,小数点之后至少一个数字   String aString = stmp;//将输入值转化成字符串型   boolean judge;   if (aString == null || aString.length() < 1)   {    System.out.println("没有输入!请输入:");    dataInput();   }

  Pattern isDoubleNum = Pattern.compile("^[+-]?[\\d]+(.[\\d])?$");   judge = isDoubleNum.matcher(aString).find();   if (judge == false)   {    System.out.println("输入有误,要重新输入:");    dataInput();   } else   {    System.out.println("输入没问题!");   }  }

 //按要求做除法  public static void division()  {   System.out.println("请输入被除数:");   try   {    dividend = dataInput();

  } catch (Exception e)   {    System.err.println("被除数输入不对:" + e.getMessage());    e.printStackTrace();   }   System.out.println("要重新输入被除数:");   dividend = dataInput();

  System.out.println("这里是输入除数:");   divisor = dataInput();   while (divisor == 0)   {    System.out.println("除数为零!----->要重新输入:");    try    {     divisor = dataInput();    } catch (Exception e)    {     System.err.println("division()方法中divisor输入数据异常"     + e.getMessage());     e.printStackTrace();    }    divisor = dataInput();   }

  System.out.println("********************************************");   System.out.println("dividend/divisor的结果为:" + dividend / divisor);  }

 public static void main(String[] args)  {   Ask.division();  }

}

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
dnf十字斩刀闪剑魂用NB么?
怎样得到神宁咒符
爱国者F100这个数码相机,性价比高不?
个人的工资奖金是否属于夫妻共同财产?
韩国最近有什么好看的电视剧?
我想加入拉拉队该怎么办
张士沟这个地址在什么地方,我要处理点事
跆拳道三个腿法
为什么两个人在一起话就变少了?
我老婆叫杨乐,作首藏头诗把杨乐加上,谢谢了
男朋友背着我找他的前女友,我要不要报复他
开远市好玩点的迪高厅
现在智能3D电视电视挺多的,哪种的好啊?求推
我右手的小拇指和无名指发麻了1个多星期了
最近农场有收集某种作物的任务吗?
推荐资讯
如果男人问你,他在你心里是个怎样的人你怎样
谁能打出这个字"钅且"?
临沂什么地方有卖喷雾器的电瓶那种
吃太咸的东西会导致月经推迟吗?
方向机转向器A为左转向,O为右转向,R为进油管,
如何看在哪个大区
在女生无意间抱到男生,男生心跳加速,那代表
黑龙江澡堂?
5几年在银行的购粮存款现在是否能取钱出来
永盛五金电料批零怎么去啊,有知道地址的么
利民大药店NO.252这个地址在什么地方,我要处
怀孕十多天,会有什么感觉和反应?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?