我正在为大学做一些作业。
我必须在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];
我想这是我的问题。我的变量“结果”不会将第一个结果与下一个结果相加。我希望你明白我的意思。我已经尝试了各种方法,但是如果不将其余数字弄乱,似乎无法完成它。
谢谢
为了澄清:这是解码背后的数学公式:
添加一个中间变量来计算循环的最终结果应该可以解决问题。这对我来说非常有效!
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);
}
}
如上所述,您只是忘了对编码值的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) == ' ') ...
甚至可以成为真正的叉积函数的调用。