我刚刚开始学习 Java,想要创建一个程序,使用 switch 语句将美国距离测量值(英寸、英尺、英里)转换为公制测量值(毫米、厘米、米、公里)。然而,我的程序有时无法区分英寸、英尺和英里之间的差异。有人可以告诉我程序中的逻辑错误吗?
import java.util.Scanner;
public class P3_24
{
public static void main(String [] args)
{
final double MILLIMETER_PER_INCH = 25.4;
final double CENTIMETER_PER_INCH = 2.54;
final double METER_PER_INCH = 0.0254;
final double KILOMETER_PER_INCH = 2.54E-5;
final double MILLIMETER_PER_FEET = 304.8;
final double CENTIMETER_PER_FEET = 30.48;
final double METER_PER_FEET = 0.3048;
final double KILOMETER_PER_FEET = 0.0003048;
final double MILLIMETER_PER_MILE = 1609344;
final double CENTIMETER_PER_MILE = 160934.4;
final double METER_PER_MILE = 1609.344;
final double KILOMETER_PER_MILE = 1.609344;
Scanner s = new Scanner(System.in);
System.out.println("Convert from: (in, ft, mi)");
String convertFrom = s.next().toLowerCase();
System.out.println("Convert to: (mm, cm, m, km)");
String convertTo = s.next().toLowerCase();
System.out.println("Value?");
double value = s.nextDouble();
s.close();
switch (convertFrom)
{
case ("in"):
{
switch (convertTo)
{
case ("mm"):
{
System.out.println("The value of " + value + "inches to mm is: " + (value * MILLIMETER_PER_INCH));
break;
}
case ("cm"):
{
System.out.println("The value of " + value + "inches to cm is: " + (value * CENTIMETER_PER_INCH));
break;
}
case ("m"):
{
System.out.println("The value of " + value + "inches to m is: " + (value * METER_PER_INCH));
break;
}
case ("km"):
{
System.out.println("The value of " + value + "inches to km is: " + (value * KILOMETER_PER_INCH));
break;
}
default:
{
System.out.println("output units not recognized, must be mm, cm, m, km");
break;
}
}
}
case ("ft"):
{
switch (convertTo)
{
case ("mm"):
{
System.out.println("The value of " + value + "ft to mm is: " + (value * MILLIMETER_PER_FEET));
break;
}
case ("cm"):
{
System.out.println("The value of " + value + "ft to cm is: " + (value * CENTIMETER_PER_FEET));
break;
}
case ("m"):
{
System.out.println("The value of " + value + "ft to m is: " + (value * METER_PER_FEET));
break;
}
case ("km"):
{
System.out.println("The value of " + value + "ft to km is: " + (value * KILOMETER_PER_FEET));
break;
}
default:
{
System.out.println("output units not recognized, must be mm, cm, m, km");
break;
}
}
}
case ("mi"):
{
switch (convertTo)
{
case ("mm"):
{
System.out.println("The value of " + value + "miles to mm is: " + (value * MILLIMETER_PER_MILE));
break;
}
case ("cm"):
{
System.out.println("The value of " + value + "miles to cm is: " + (value * CENTIMETER_PER_MILE));
break;
}
case ("m"):
{
System.out.println("The value of " + value + "miles to m is: " + (value * METER_PER_MILE));
break;
}
case ("km"):
{
System.out.println("The value of " + value + "miles to km is: " + (value * KILOMETER_PER_MILE));
break;
}
default:
{
System.out.println("output units not recognized, must be mm, cm, m, km");
break;
}
}
}
default:
{
System.out.println("input units not recognized, must be in, ft, mi");
break;
}
}
}
}
再次抱歉,问了这样一个新手问题。
最佳答案
正如@rgettman 评论的那样,您缺少外部convertFrom 案例中的break 语句。
case ("in"):
{
switch (convertTo)
{
case ("mm"):
{
System.out.println("The value of " + value + "inches to mm is: " + (value * MILLIMETER_PER_INCH));
break;
}
case ("cm"):
{
System.out.println("The value of " + value + "inches to cm is: " + (value * CENTIMETER_PER_INCH));
break;
}
case ("m"):
{
System.out.println("The value of " + value + "inches to m is: " + (value * METER_PER_INCH));
break;
}
case ("km"):
{
System.out.println("The value of " + value + "inches to km is: " + (value * KILOMETER_PER_INCH));
break;
}
default:
{
System.out.println("output units not recognized, must be mm, cm, m, km");
break;
}
}
break; // breaks the outer switch case "in"
}
如此处注释行所示作为示例。如果没有其中的中断,它将直接进入下一种情况,即:
switch(0) {
case (0):
System.out.println("0 case");
case (1):
System.out.println("1 case");
default:
System.out.println("default case");
}
将打印出:
0 case
1 case
default case
关于java - 在java中转换美国距离测量和公制系统的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53329299/