java - 使用静态变量堆叠 switch 语句并循环 main 方法

标签 java

我正在用java制作一个单位转换器,当我在循环后运行程序时遇到问题。我不确定这是否是我的静态变量、switch 语句或循环的问题 - 我是 java 新手,这是我的第一个程序。我遇到的主要问题是,在第二次运行它并切换要转换的单位类型后,会出现这个:

“输入转换值: 33

33 公斤 = 145.50525 磅

输入转化值:“

但我希望它做这个:

“33 公斤 = 145.50525 磅

您想继续并执行另一次转换吗? (“Y”或“N”)”

这是代码(抱歉,我知道有很多东西需要查看)

import java.util.Scanner;

public class Unitconverter {

public static class displayer{
    static int x,a,b,c,z1,z2,z3;
static Scanner mType = new Scanner(System.in);
static Scanner mDirect = new Scanner(System.in);
static Scanner mValue = new Scanner(System.in);
static Scanner YN = new Scanner(System.in);
static String YorN = "y";

public static void main(String args[]) {

    mainMenu();
    Type();
    Direction();
    Loop();

}


public static void  mainMenu(){
    System.out.println ("Unit Converter!");
    System.out.println("");
    System.out.println("What type of measurement would you like to convert?");
    System.out.println("1. Convert length");
    System.out.println("2. Convert weight");
    System.out.println("3. Convert volume");
    x = mType.nextInt();

}

public static void Type(){
switch(x){
case 1:
    System.out.println ("1. Feet to Meters");
    System.out.println ("2. Meters to Feet");
    System.out.println ("Select conversion direction:"); 
    a =mDirect.nextInt();
    break;
case 2:
    System.out.println ("1. Pounds to Kilograms");
    System.out.println ("2. Kilograms to Pounds");
    System.out.println ("Select conversion direction:"); 
    b =mDirect.nextInt();
    break;
case 3:     
    System.out.println ("1. Gallons to liters");
    System.out.println ("2. Liters to gallons");
    System.out.println ("Select conversion direction:"); 
    c =mDirect.nextInt();   
    break;  
}

}



public static void Direction(){ 

    switch(a){
        case 1: System.out.println("Enter Value for Conversion:");
        z1 =mValue.nextInt(); 
        System.out.println(z1 +" "+ "Feet =" +" "+ z1*0.3048 +" "+ "Meters");
        break;

        case 2:System.out.println("Enter Value for Conversion:");
        z1 =mValue.nextInt(); 
        System.out.println(z1 +" "+ "Meters =" +" "+ z1*3.28084 +" "+ "Feet");
        break;

        }
    switch(b){

        case 1: System.out.println("Enter Value for Conversion:");
        z2 =mValue.nextInt(); 
        System.out.println(z2 +" "+ "Pounds =" +" "+ z2*0.453592 +" "+ "Kilograms");
        break;

        case 2:System.out.println("Enter Value for Conversion:");
        z2 =mValue.nextInt(); 
        System.out.println(z2 +" "+ "Kilograms =" +" "+ z2*4.40925 +" "+ "Pounds");
        break;

        }
    switch(c){
        case 1: System.out.println("Enter Value for Conversion:");
        z3 =mValue.nextInt(); 
        System.out.println(z3 +" "+ "Gallons =" +" "+ z3*3.78541 +" "+ "Liters");
        break;

        case 2:System.out.println("Enter Value for Conversion:");
        z3 =mValue.nextInt(); 
        System.out.println(z3 +" "+ "Liters =" +" "+ z3*0.264172 +" "+ "Gallons");
        break;
    }

}

public static void Loop() {

        while (YorN.equalsIgnoreCase("y")){
            System.out.println("");
            System.out.println ("do you want to continue and perform another conversion? ('Y' or 'N')");
            YorN = YN.nextLine();
            main(null);

        }
    }
}
}   

最佳答案

将以下行添加到 Type 函数的顶部来解决您当前的问题

a=b=c=-1; 

这可确保一次只有一个变量具有有效的 case 值。

此外,您还导致了无限堆栈问题..

将循环更改为如下(或者像 Quoi 那样,这是一个更好的选择)

System.out.println("");
System.out.println ("do you want to continue and perform another conversion? ('Y' or 'N')");
YorN = YN.nextLine();
if(YorN.equalsIgnoreCase("y"))
    main(null);

关于java - 使用静态变量堆叠 switch 语句并循环 main 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746376/

相关文章:

java - 需要在单元测试中使用依赖注入(inject) - 我应该使用 junit 还是 testng?

java - 获取LibGdx动画的宽度和高度

java - 如何从 Java 枚举所有启用的 NIC 卡的 IP 地址?

java - Tomcat 7 TagLib 和用户问题

java - 从命令行通过 stdin 访问 Java 应用程序

java - InetAddress : getHostAddress() returns 127. x.x.x 而不是外部 IP 地址

java - 定义轮廓是否闭合

java - Elastic Search Scroll API 无限循环滚动

java - 如何在java邮件的电子邮件主题行中包含英镑符号

java - 编写 Eclipse Java 调试器脚本?