Java:如何在If语句中添加数字(帖子中有解释)

问题描述 投票:-1回答:2

我正在为大学做一些作业。

我必须在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];

我想这是我的问题。我的变量“结果”不会将第一个结果与下一个结果相加。我希望你明白我的意思。我已经尝试了各种方法,但是如果不将其余数字弄乱,似乎无法完成它。

谢谢

为了澄清:这是解码背后的数学公式:

Its in German, sorry for that

java if-statement variables add
2个回答
0
投票

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

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);
       }
}

UPDATE

已删除冗余变量的代码。

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);
       }
}

0
投票

如上所述,您只是忘了对编码值的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之间的“叉积”。如果您直接将s编码为01001011000011 ...,也将其编码为一个数组(具有0 ='|',1 =''),则这是一个非常简单的while ... if(charAt(i) == ' ') ...甚至可以成为真正的叉积函数的调用。

© www.soinside.com 2019 - 2024. All rights reserved.