题
在过去的几个星期,我通过这本书差错控制编码阅读:基础与应用的,以了解BCH(百色,乔杜里,黑姆)代码在一个电信公司的初级编程的作用。
这本书主要涵盖的主题背后的数学和理论,但我在努力实现的一些概念;主要是获得下的名词的codewords.I有一个GUI(通过NetBeans的实施,使该文件是巨大的,我不会发布的代码),为了获得下通过代码的 ñ数:
生成这些数字是我在哪里遇到的问题。如果我可以去通过所有这些只是编码方法,而不是通过使用GUI我的生命循环中会十倍更容易。
这已经现在快把我逼疯了几天,因为它是很容易产生从输入0000000000,但我失去了在何处从那里我的代码。我该怎么做,然后生成下一个工作号码是多少?
与生成上述代码任何帮助,将不胜感激。
解决方案
(大编辑...)的代码打多一点这似乎工作:
import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(final String[] argv)
{
final int startValue;
final int iterations;
final List<String> list;
startValue = Integer.parseInt(argv[0]);
iterations = Integer.parseInt(argv[1]);
list = encodeAll(startValue, iterations);
System.out.println(list);
}
private static List<String> encodeAll(final int startValue, final int iterations)
{
final List<String> allEncodings;
allEncodings = new ArrayList<String>();
for(int i = 0; i < iterations; i++)
{
try
{
final int value;
final String str;
final String encoding;
value = i + startValue;
str = String.format("%06d", value);
encoding = encoding(str);
allEncodings.add(encoding);
}
catch(final BadNumberException ex)
{
// do nothing
}
}
return allEncodings;
}
public static String encoding(String str)
throws BadNumberException
{
final int[] digit;
final StringBuilder s;
digit = new int[10];
for(int i = 0; i < 6; i++)
{
digit[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
}
digit[6] = ((4*digit[0])+(10*digit[1])+(9*digit[2])+(2*digit[3])+(digit[4])+(7*digit[5])) % 11;
digit[7] = ((7*digit[0])+(8*digit[1])+(7*digit[2])+(digit[3])+(9*digit[4])+(6*digit[5])) % 11;
digit[8] = ((9*digit[0])+(digit[1])+(7*digit[2])+(8*digit[3])+(7*digit[4])+(7*digit[5])) % 11;
digit[9] = ((digit[0])+(2*digit[1])+(9*digit[2])+(10*digit[3])+(4*digit[4])+(digit[5])) % 11;
// Insert Parity Checking method (Vandermonde Matrix)
s = new StringBuilder();
for(int i = 0; i < 9; i++)
{
s.append(Integer.toString(digit[i]));
}
if(digit[6] == 10 || digit[7] == 10 || digit[8] == 10 || digit[9] == 10)
{
throw new BadNumberException(str);
}
return (s.toString());
}
}
class BadNumberException
extends Exception
{
public BadNumberException(final String str)
{
super(str + " cannot be encoded");
}
}
我宁愿抛出异常,而不是返回一个特殊的字符串。在这种情况下,我不理它通常我想说的是不好的做法例外,但这种情况下,我认为这是你想要的。
其他提示
很难说,如果我得到你的问题,但在阅读您的问题几次后,也许这就是你要找的内容:
public List<String> encodeAll() {
List<String> allEncodings = new ArrayList<String>();
for (int i = 0; i < 1000000 ; i++) {
String encoding = encoding(Integer.toString(i));
allEncodings.add(encoding);
}
return allEncodings;
}
有一个在溶液中的一种缺陷,toOctalString结果不是0填充。如果这是你想要什么,我建议在编码调用使用String.format("<something>", i)
。
<强>更新强>
要在当前呼叫与调用此方法时使用它,替换到编码(字符串str)的呼叫。您会收到所有编码的有序列表。
我aasumed,你只在八进制值感兴趣 - 我的错,现在我想你忘记了价值000009编码在您例如,从而去除irretating八进制的东西。
。不隶属于 StackOverflow