任务描述
创建一个类(DoubleConverter),该类的作用是将一个数值字符串转换成浮点型(double)数值。
相关知识
为了完成本关任务,你需要掌握:String类的有关方法的使用。
要求
创建一个类DoubleConverter,有二个公有方法: public boolean check(String value);//value为将转换的字符串,检查该字符串是不是有效的数值字符串,如是返回true,否则返回false; public double convert(String value); //value为将转换的字符串, 返回为转换后的浮点数,如果返回为0.0,表明用户输入的字符串不是数值串.
提示
合理的浮点表示方法有如下几种形式: 123456 123456.123 +123456.12 = 123456.12 -123456.12 .1234 = 0.1234
我经过查找学习,发现了一些数据类型转换函数能很好地解决问题,比如Double.parseDouble(),是把括号里面的内容变成double类型的,类似还有Integer.parseInt()是将之变成int类型的。还有toCharArray()用法,是将字符串对象中的字符转换为一个字符数组的。
下面我将用这些方法进行两个公有方法的完成:
package step1;
public class DoubleConverter{
//在此完成该类
public boolean check(String value){
char a[] = value.toCharArray();
int i,b=1;
if((a[0]>='0'&&a[0]<='9')||a[0]=='+'||a[0]=='-'||a[0]=='.')
{
for (i=1;i<a.length;i++){
if(a[i]>='0'&&a[i]<='9'||a[i]=='.')
b=1;
else
b=0;
}
if(b==0)
return false;
else
return true;
}
else
return false;
}
public double convert(String value)
{
double x=Double.parseDouble(value);
return x;
}
}
不用数据类型转换函数的,比较麻烦,需要自己好好思考。首先我们不用上面的字符串转换数组,我们用length()来获取字符串的长度,并以int型变量返回该字符串的长度;用charAt(i)来获取字符串中i位置的字符,判断方法与上面方法略有不同,是总体遍历符不符合,用if—else if来更好判断。
第二个方法也不用Java现有的函数,用数学方法来完成,我在此处多次犯错,下面的代码是查了一些资料结合着完善改正的:
package step1;
public class DoubleConverter {
public boolean check(String value) {
int len = value.length();//获取字符串的长度,并以int型变量返回该字符串的长度
int flag = 1;
for(int i = 0;i < len;i++)
{
if(value.charAt(i) == '.'||value.charAt(i) == '+'||value.charAt(i) == '-')continue;//charAt(i)函数是获取字符串中i位置的字符
else if((value.charAt(i) < '0'||value.charAt(i) > '9')) {
flag = 0;
break;
}
}
if(flag == 1) {
return true;
}
else return false;
}
public double convert(String value) {
if(check(value)) {
double num = 0.0;
int a = 1;//用来判断正负
int b = 1;//用来标记字符串中小数点出现
int v = 0;
for(int i = 0;i < value.length();i++) {
if(value.charAt(i) == '-') {
a = 0;
continue;
}
else if(value.charAt(i) == '+')
{
a = 1;
continue;
}
if(value.charAt(i) == '.') {
b = 0;
v = i;
continue;
}
if(b == 0) {
num += (value.charAt(i)-'0')*Math.pow(10,v-i);
}
else {
num = num*10+(value.charAt(i)-'0');
}
}
if(num!=0) {
if(a == 0)
num *= -1.0;
}
return num;
}
else return 0.0;
}
}