我在与原点的距离计算器程序中创建错误消息时遇到问题。
double x; // x coordinate
double y; // y coordinate
String quadrant; //new string: quadrant
System.out.println("Enter x coordinate");//prompt user to enter x coordinate
do{System.out.println ("Error: Enter a number");}while (!input.hasNextDouble());
x = input.nextDouble()+.0;
当我运行程序时,我在提示输入值后直接收到一条错误消息。如果我输入一个无效字符,它会启动一个带有错误的无限循环。如果我将 do-while 循环移动到它之后input.nextdouble
它什么也不做。
完整代码:
package distancefromorigin;
/**
* Distance from origin calculator application
* Created for CSCI 11
* Last modified 9/22/2013 2:30 AM
* @author Steve Pesce
*/
import java.util.Scanner; //Start Scanner utility
public class DistanceFromOrigin
{
public enum Quad //initialize enum Quad with values 1-4 in roman numerals
{I , II, III, IV}
/**
* main method calculates distance from a point to
* the origin using the Cartesian coordinate system
* and locates the quadrant that the point lies in
*/
public static void main(String[] args)
{
Scanner input = new Scanner (System.in); // new scanner (imput)
Quad loc; //new Quad : loc (quadrant #)
double dist; //distance from (x,y) to (0,0)
double x; // x coordinate
double y; // y coordinate
String quadrant; //new string: quadrant
System.out.println("Enter x coordinate");//prompt user to enter x coordinate
x = input.nextDouble()+.0; //save next number entered as x
do
{
System.out.println ("Error: Enter a number");
}while (!input.hasNextDouble());
System.out.println("Enter y coordinate");
do
{
System.out.println ("Error: Enter a number");
}
while (!input.hasNextDouble());
//prompt user to enter y coordinate
y = input.nextDouble()+ .0; //save next number entered as y
if (x == 0) //if x=0 and y doesn't = 0
{
if (y >= 0) //and if y greater than or equal to zero
{
dist = y; //then distance is y
}
else //if y is negative
{
dist = -y ; //then distance is y(-1)
}
}
else if ((y == 0) && (x != 0)) // if y=0 and x doesn't = 0
{
if (x > 0) // and if x is positive
{
dist = x ; // then distance is x
}
else // if x is negative
{
dist = -x ; // then distance is x(-1)
}
}
//if x and y both don't equal zero then use hypotenuse formula
else dist = (Math.hypot ((double) x , (double) y));
if (x >= 0) //if x is non negative
{
if (y < 0) //and if y is negative
{
loc = Quad.IV;//then point is in quadrant IV
}
else loc = Quad.I;//if x and y are both nonnegative then the point
} //is in quadrant I
else if (y < 0) //if x is negative and y is negative
{
loc = Quad.III; //then the point is in quadrant III
}
else loc = Quad.II; //if x is negative and y is nonnegative then the
//point is in quadrant II
//Print "the point (x,y) is (dist) units away from the origin (0,0)
// and is in quadrant (loc)"
System.out.println( "The point("
+ (int)x + "," + (int)y + ") is " + (double)dist
+" units from the origin (0,0) and is in Quadrant " +
loc + ".");
}//end main()
}//end class DistanceFromOrigin