要求和源码如下,未能得出要求的结果:
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();
}
}