java - 在java中转换美国距离测量和公制系统的程序

标签 java switch-statement

我刚刚开始学习 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/

相关文章:

java - 我如何只获得带有反射的可实例化类

java - 从 IntelliJ Idea Community 运行嵌入式 Tomcat 时遇到问题

sql - 如何在vb.net中使用Switch语句 Access access数据库

java - 如何避免工厂类中的 "cascading if\case"语句

Java 正则表达式匹配如果前面没有关键字

java - 连接到不同服务器中的多个数据库

java - 洗牌和显示 10 java 小程序

linux - Bash:否则在 case 语句中的 if/else 语句中不起作用

c - C 中 (switch) 的问题

php - 使用 SNMP WALK 获取一个端口上的 MAC 地址列表