编辑注意:我不是很清楚。我试图从单个字母猜测开始,例如0到00到000 ......一直到zzzzzz。基本上,所有可能的迭代从0到zzzzzz。对不起,我不是很清楚!
我正在尝试循环播放一系列字符。该数组包含0-9和a-z(小写)。不可否认,这是作业 - 我是一个无用的编码器(见上一篇文章),我可以做一些帮助。
我想要的是迭代char数组的所有可能结果并列出结果......
aaa aba
aab > through to > aca
aac ada
如果它只是基于我读过的字母,我可以将它建立在base26号码系统上,但这包括数字。
到目前为止,我已经设法循环遍历数组,在下一个位置循环之前将答案分配给'guess'数组。在那之后,我很难过。
任何建议,如上一次,非常感谢。这项工作以蛮力为基础,但如果我的真正目标是非法的,那么我可以使用大量工作实例,但事实并非如此。
这是我到目前为止所拥有的。
/**
*
* @author Aaron
*/
public class Test {
/**
* @param args the command line arguments
*/
int current = 0;
char[] guess = new char[6];
public static void main(String[] args) {
Test test = new Test();
int maxLength = 6;
char c = '0';
while (maxLength != 0) {
maxLength--;
test.iterateAll(c);
test.increment(c);
}
}
public void iterateAll(char c) {
char[] charset = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z'};
for (int i = 0; i < charset.length; i++) {
//c = charset[i];
guess[current] = charset[i];
System.out.println(guess);
}
}
public void increment(char c) {
current++;
}
}
答案 0 :(得分:1)
您可以使用Integer.toString()吗?如果是这样,它愿意为您完成大部分工作。以下打印aaa,aab,aac等等。
final int start = 36*36*10 + (36*10) + 10;
for (int i = start; i < 36*36*36; ++i) {
final String base36 = Integer.toString(i, 36);
final String padded = String.format("%3s", base36).replace(' ', '0');
System.out.println(padded);
}
答案 1 :(得分:0)
我使用StringBuilder让你在角色级别“操纵”字符串。这里只是向上,在pos“寄存器”中从左到右携带值,这些只是索引字符序列。另请注意,字符只是一种数字,因此可以在循环中用作文字。
char[] seq = new char[36];
int i = 0;
for (char c = '0'; c <= '9'; c++) {
seq[i++] = c;
}
for (char c = 'a'; c <= 'z'; c++) {
seq[i++] = c;
}
int length = 3;
StringBuilder builder = new StringBuilder(" ");
int[] pos = new int[length];
int total = (int) Math.pow(seq.length, length);
for (int count = 0; count < total; count++) {
for (int x = 0; x < length; x++) {
if (pos[x] == seq.length) {
pos[x] = 0;
if (x + 1 < length) {
pos[x + 1]++;
}
}
builder.setCharAt(x, seq[pos[x]]);
}
pos[0]++;
System.out.println(builder.toString());
}