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(),它需要一个 char 作为参数,而不是一个 int,请参阅此链接: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 回答