1

Java で単位コンバーターを作成していますが、ループ後にプログラムを実行すると問題が発生します。静的変数、switch ステートメント、またはループに問題があるかどうかはわかりません。私は Java を初めて使用し、これが私の最初のプログラムです。私が抱えている主な問題は、2回目に実行し、変換するユニットのタイプを切り替えた後、次のようになることです:

"換算値を入力してください: 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);

        }
    }
}
}   
4

2 に答える 2

0

Type次の行を関数の先頭に追加して、現在の問題を修正します

a=b=c=-1; 

これにより、一度に有効なcase値を持つ変数は 1 つだけになります。

また、無限スタックの問題を引き起こしています..

ループを次のように変更します (または、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);
于 2013-02-07T08:08:29.553 に答える
0

私があなたを正しく理解していれば:)、do-whilen回の仕事を得るために使用してください。

public static void main(String args[]) {
  do{
       mainMenu();
      Type();
      Direction();
      System.out.println ("do you want to continue and perform another conversion? ('Y' or 'N')");
      String input = YN.nextLine();  
   }while(YorN.equalsIgnoreCase(input));
}
于 2013-02-07T08:10:15.970 に答える