今天早上我正在做课堂作业,我想尝试解决迄今为止我在所有队友计划中注意到的问题;int/float/double 中的空格会导致 Java 崩溃。
为了解决这个问题,我有一个非常疯狂的想法,但它在某些情况下确实有效。然而问题是它并不总是有效,我不知道为什么。这是我的“主要”方法:
import java.util.Scanner; //needed for scanner class
public class Test2
{
public static void main(String[] args)
{
BugChecking bc = new BugChecking();
String i;
double i2 = 0;
Scanner in = new Scanner(System.in);
System.out.println("Please enter a positive integer");
while (i2 <= 0.0)
{
i = in.nextLine();
i = bc.deleteSpaces(i);
//cast back to float
i2 = Double.parseDouble(i);
if (i2 <= 0.0)
{
System.out.println("Please enter a number greater than 0.");
}
}
in.close();
System.out.println(i2);
}
}
所以这是类,请注意我正在使用浮点数,但我做了它以便它可以用于任何类型,只要它可以转换为字符串:
public class BugChecking
{
BugChecking()
{
}
public String deleteSpaces(String s)
{
//convert string into a char array
char[] cArray = s.toCharArray();
//now use for loop to find and remove spaces
for (i3 = 0; i3 < cArray.length; i3++)
{
if ((Character.isWhitespace(cArray[i3])) && (i3 != cArray.length)) //If current element contains a space remove it via overwrite
{
for (i4 = i3; i4 < cArray.length-1;i4++)
{
//move array elements over by one element
storage1 = cArray[i4+1];
cArray[i4] = storage1;
}
}
}
s = new String(cArray);
return s;
}
int i3; //for iteration
int i4; //for iteration
char storage1; //for storage
}
现在,我们的目标是从数组中删除空格,以解决帖子开头所述的问题,并且据我所知,这段代码应该可以实现这一点并且确实可以做到,但前提是输入的第一个字符是空间。
例如,如果我输入“2.0332”,则输出为“2.0332”。
但是,如果我输入“2.03 445”,则输出为“2.03”,其余部分会丢失在某处。
这第二个例子是我试图弄清楚如何解决的问题。
编辑:
下面大卫的建议能够解决这个问题。绕过发送一个 int。直接将其作为字符串发送,然后转换(我总是听说这被描述为强制转换)为所需的变量类型。更正了上面 Main 方法中的代码。
附带说明一下,如果您打算使用它,即使替换要容易得多,请务必在 deleteSpaces 中的 if 语句中添加一个 && 检查,以确保 if 语句仅在您不在最终数组元素上时执行数组。如果您通过 i3 将最后一个元素值传递给下一个将 i4 设置为 i3 的值的 for 循环,我认为它将触发 OutOfBounds 错误,因为它只会检查最后一个元素 - 1。