Java: 如何在 If 语句中添加数字(post 中的解释)

Java: How can I add numbers in an If Statement (explanation in the post)

我正在做一些大学作业。

我必须在 int 数组上迭代一个字符串来解码匹配的符号。

我需要你的帮助来解决以下问题:

这是我现在的代码:

public static void main(String[] args) {
            String s = "| || |  ||||  |||| || || | ||| || ||";

            int result = 0;
            int[] num = {0, 1, 2, 4, 7};
            String over = "";
            String[] parts = s.split("(?<=\G.{6})");
            for(int i=0; i<parts.length; i++) {
              parts[i] = parts[i].substring(0, 5);
              over = parts[i];
              for(int j = 0; j < num.length; j++) {
                  if(over.charAt(j) == ' ') {
                      result = num[j];

                  }                   
              }
              System.out.println(result);
}



}

输出是:711424 但我需要它是 811424。

for(int j = 0; j < num.length; j++) {
                  if(over.charAt(j) == ' ') {
                      result = num[j];

这是我认为的问题。我的变量 "result" 不会将第一个结果添加到下一个结果。 我希望你明白我的意思。我尝试过各种方法,但如果不搞砸其余数字,似乎无法完成。

谢谢

澄清一下:这是解码背后的数学:

Its in German, sorry for that

添加一个中间变量来计算循环的最终结果应该可以解决问题。
这对我来说非常有效!

public static void main(String[] args) {
            String s = "| || |  ||||  |||| || || | ||| || ||";

            int result = 0;
            int[] num = {0, 1, 2, 4, 7};
            String over = "";
            String[] parts = s.split("(?<=\G.{6})");
            for(int i=0; i<parts.length; i++) {
              parts[i] = parts[i].substring(0, 5);
              over = parts[i];
              int intermediateResult = 0;
              for(int j = 0; j < num.length; j++) {
                  if(over.charAt(j) == ' ') {
                      intermediateResult += num[j];

                  }                   
              }
              result = intermediateResult;
              System.out.println(result);
       }
}

更新

删除了冗余变量的代码。

public static void main(String[] args) {
            String s = "| || |  ||||  |||| || || | ||| || ||";

            int[] num = {0, 1, 2, 4, 7};
            String[] parts = s.split("(?<=\G.{6})");
            for(int i=0; i<parts.length; i++) {
              parts[i] = parts[i].substring(0, 5);
              int result = 0;
              for(int j = 0; j < num.length; j++) {
                  if(parts[i].charAt(j) == ' ') {
                      result += num[j];

                  }                   
              }
              System.out.println(result);
       }
}

如上所述,您只是忘记了对编码值的 4 个有用部分求和,如 8 = 1+7;

但是关于代码的更多注释:

如果你使用int[] num = {0, 1, 2, 4, 7, 0};你甚至不需要拆分字符串s,假设它总是有6个元素的倍数。然后你可以使用一个简单的 while 或 for 循环 s 的全长(特别是如果 s 的长度是恒定的,或者它可以填充为恒定长度,以防你可能有 5 或 6 位数字而不是总是 6) .
在该循环中,您可以使用索引 i%6 或让另一个索引 j 每次达到 6 时都返回 0,但它应该与速度相当。您需要该索引来打印数字,将中间总和重置为 0,并在现实生活中将其与重置前的总邮政编码相加。

但更好的是,您可以使用 int[] num = {0, 100000, 200000, 400000, 700000, 0, 0, 10000, 20000, 40000, 70000, 0, 0, 1000, 2000, 4000, 7000, 0, 0, 100, 200, 400, 700, 0, 0, 10, 20, 40, 70, 0, 0, 1, 2, 4, 7, 0}; 然后您需要计算的只是 s 和 num 之间的 "cross product"。这是一个非常简单的 while ... if(charAt(i) == ' ') ... 或者如果您将 s 直接编码为 01001011000011... 甚至可以成为对真正叉积函数的调用...也在数组中(0='|', 1=' ')。