【问题标题】:How to get the sum out of my switch case java program?如何从我的 switch case java 程序中得到总和?
【发布时间】:2015-11-11 15:29:12
【问题描述】:

这是我们的任务。我们必须使用 while 将 unicode 转换为十进制值。 我对输入使用 switch case,因此很容易划分每个输入,但我现在无法计算所有值的总和。

public class Exercise { 

    public static void main (String[] args) throws Exception
    {
        int uni = 0, code = 0, dec=0, sum=0;
        System.out.println("Please write a Unicode of the form \\uxxxx");

        while ((uni = System.in.read()) != '\n') {
            code++;

            if (uni!='\\' && code == 1) {
                System.out.println("You did not write \\ correctly");   
                break;
            }

            if (uni!='u'&&code == 2) {
                System.out.println("You did not write u correctly");
                return;
            }

            if(code >=3 && code <=6)
            {
                if(uni >= '0' && uni <= '9'|| uni >= 'a'&&uni<='f')
                {
                    switch (code) {
                    case 3:
                        dec=uni*4096;
                        break;
                    case 4: 
                        dec=uni*256;
                        break;
                    case 5:
                        dec=uni*16;
                        break;
                    case 6:        
                        dec=uni*1;
                        break;
                    default:
                        Sytem.out.println("Too much values!");
                        break;
                }
            sum=sum+dec;
            }
            else
            {
                System.out.println("Wrong!!!");
                return;
            }           
         }          
     }        
    System.out.println(sum);
    }
}

一如既往,感谢您的帮助! :)

【问题讨论】:

  • 首先,我将创建一个将单个十六进制数字转换为十进制的方法(这种转换目前在您的实现中是错误的)。第二步是认识到每个十六进制数字的价值是下一个数字的 16 倍,因此您可以通过简单的除法得到该值。第三,我会将字符表示为char 类型,而不是int。
  • 为什么你不能只做 dec+=unicodeValue(unicode) 并在最后打印出来
  • 您尝试将ints 组合回有效字符值的逻辑/数学不正确。您的步骤调试器会告诉您数学错误的地方。

标签: java sum switch-statement case


【解决方案1】:

您需要将字符 uni 转换为其数值 (0-15) 并使用它。

int digit = 0;
if ('0' <= uni && uni <= '9') {
    digit = uni - '0';
} else ('a' <= uni && uni <= 'f') {
    ... // 10-15
} else ('A' <= uni && uni <= 'F') {
    ...
}

【讨论】:

  • 而且在你这样做的同时,你还可以将数字类型更改为char。
【解决方案2】:

只需声明一个 int 变量(可能称为“sum”)

int sum = 0;

在循环之外,每次计算新的 dec 时,将其添加到总和值。

sum = sum + dec;

然后在函数的最后,返回或打印 sum 的值。

sum = sum + dec;必须进入 while 循环,在 case 语句的末尾。这是您刚刚在循环中设置 dec 值的点。如果你把它排除在 while 循环之外,那么你只会在 while 循环退出后向它添加一次 dec,而不是向它添加每个值。

【讨论】:

  • 我明白你的意思,但它不能正常工作。我刚刚尝试了 \u0123 的 unicode 值,它打印出 51,这是不对的。正确的值是 291。有什么建议吗?
  • 能否用您对代码所做的更改更新您的问题?
  • 完成。我还尝试在案例中和 while 循环内写总和。
  • 如果你把它放在while循环之外肯定是行不通的,请参阅我更新的答案以获得解释,并在你更改后再次更新你的帖子。
  • 我早点试过了,但这就是我得到的。请编写格式为 \uxxxx \u0123 210003 的 Unicode 我现在将编辑我的问题
猜你喜欢
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 2020-06-19
相关资源
最近更新 更多