在我的程序中,我要将用户输入存储在一个数组中,然后检查每个字符以查看它是否为数字或点或E或负号后我将其存储在一个名为temps
的数组中。
现在我的逃逸方法()中存在问题,我不应该如何处理浮动数字数字 - 数字 - 数字 - 数字(例如12.22)的模式
我的工作在这里:
public void sorting(String data) {
String[] temps = new String[200];
int cpos = 0;
int tpos = 0;
Arrays.fill(temps, null);
if (str.isEmpty() == false) {
char char1 = str.charAt(cpos);
int i = 0;
while (i < str.length()) {
char1 = str.charAt(cpos);
char1 = str.charAt(tpos);
System.out.println("the current value is " + char1 + " ");
tpos++;
if (Character.isDigit(char1)) {
temps[cpos] = "Digit";
// System.out.println(" this number is digit");
cpos++;
} else if (char1 == 'e' || char1 == 'E') {
temps[cpos] = "s_notaion";
cpos++;
} else if (char1 == '-') {
temps[cpos] = "negative";
cpos++;
} else if (char1 == '.') {
temps[cpos] = ".";
cpos++;
}
i++;
}
}
}
这是浮点数的方法
private static boolean floating(String [] data) {
int count =0;
boolean correct = false;
for (int i = 0; i < data.length; i++) {
if (data[i]== "Digit" )
&& data[i]=="." && data[i]"Digit"){
// here is the problem for the condition
}
}
return false;
}
答案 0 :(得分:1)
测试String是否可以表示float的最简单方法是尝试解析它:
String testString = "1.2345";
double result;
try {
result = Double.parseDouble(testString);
System.out.println("Success!")
}
catch (NumberFormatException nfe) {
// wasn't a double, deal with the failure in whatever way you like
}
答案 1 :(得分:1)
问题缺乏一些背景,所以对于我的回答,我会假设这是需要手动解决方案的作业,并且所有浮点数都应该被接受。
你的方法(虽然过度设计)是半正确的:你将输入字符串缩减为字符类 - 数字,符号,指数标记。缺少的是现在你必须确保这些字符类的顺序正确。
识别浮点数的各个部分(只看0,1.0,400E30,42.1E-30),你会看到它们按特定顺序排列,即使有些是可选的,并且每个部分都强加限制在那里允许的字符。例如,如果数字中有“E”,则必须后跟一个数字(带有可选符号)。
因此,当您逐步浏览字符串的字符时,请考虑如何跟踪数字中的位置,并根据该字符验证(这是@JonKiparsky提到的状态机)。
一些小事:
答案 2 :(得分:1)
使用正则表达式是Handel这个问题的最佳方法
private static boolean floating(String [] data) {
int count =0;
boolean correct = false;
for (int i = 0; i < data.length; i++) {
if (str.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")){
System.out.println(" it's a floating number ");
correct= true;
break;
}else
correct = false;
}if (correct ==true){
return true;
}else
return false;
}
答案 3 :(得分:0)
如果我理解正确,数据阵列有[“数字”,“数字”,“。”,“数字”]等东西
所以你想要
private static boolean floating(String [] data) {
如果数组只有“Digit”条目并且只有一个“。”,则返回true的方法。条目?是吗?
如果是这样的话:
boolean foundLeDigit = false;
for (int i = 0; i < data.length; i++) {
if (data[i].equals("Digit") == false && data[i].equals(".") == false {
//we found something other than a Digit or . it's not a float
return false;
}
if(data[i].equals(".")) {
if(foundLeDigit) { return false; //as we found 2 "." }
foundLeDigit = true
}
}
return foundLeDigit;