1

switch ステートメントを実行するために数字を生成しようとしていますが、適切な結果が生成されません。ただし、IF ブロックを削除すると、正しく機能します。コードの問題は何ですか?

import static java.lang.Character.isDigit;
public class TrySwitch
{
  enum WashChoise {Cotton, Wool, Linen, Synthetic }
  public static void main(String[]args)
        {

        WashChoise Wash = WashChoise.Cotton;
        int Clothes = 1;
         Clothes = (int) (128.0 * Math.random());
         if(isDigit(Clothes))
         {
            switch (Clothes)
            {
                case 1:
                System.out.println("Washing Shirt");
                Wash = WashChoise.Cotton;
                break;
                case 2:
                System.out.println("Washing Sweaters");
                Wash = WashChoise.Wool;
                break;
                case 3:
                System.out.println("Socks ");
                Wash = WashChoise.Linen;
                break;
                case 4:
                System.out.println("washing Paints");
                Wash = WashChoise.Synthetic;
                break;

            }
                switch(Wash)
                {
                    case Wool:
                    System.out.println("Temprature is 120' C "+Clothes);
                    break;
                    case Cotton:
                    System.out.println("Temprature is 170' C "+Clothes);
                    break;
                    case Synthetic:
                    System.out.println("Temprature is 130' C "+Clothes);
                    break;
                    case Linen:
                    System.out.println("Temprature is 180' C "+Clothes);
                    break;

                 }              
                }   
         else{
             System.out.println("Upps! we don't have a digit, we have  :"+Clothes );
                  }
        }

}
4

3 に答える 3

3

isDigit() を適切に使用していません。int ではなく char を引数として取ります。次のリンクを参照してください: http://www.tutorialspoint.com/java/character_isdigit.htm

于 2012-04-21T11:12:44.583 に答える
2

秘訣は、 isDigit メソッドが文字を意味し、それらが数字を表しているかどうかを検出することです。たとえばisDigit(8) == false、8 は ASCII ではバックスペースにマップされますがisDigit('8') == true、'8' は ASCII では実際には 56 であるためです。

あなたがしたいことは、ifを完全に削除し、ランダム生成を変更して、常に1から4の間の数値を生成することです.これは次のように行うことができます:

Clothes = ((int) (128.0 * Math.random())) % 4 + 1;

% 4、値が常に 0 から 3 の間にあることを確認し、+ 1は範囲を 1 から 4 にシフトします。

Java に含まれている Random クラスを使用することもできます。

import java.util.Random;
...
Clothes = new Random().nextInt(4) + 1

もう一度+ 1、範囲を 1 から 4 までにシフトします。

于 2012-04-21T11:20:26.880 に答える
1

isDigit() は基本的に、48 ~ 57 の範囲の ascii 値、つまり数字である文字をテストします。そうではない可能Clothes性があります。

http://www.asciitable.com/

于 2012-04-21T11:18:27.453 に答える