我正在尝试构建一个程序,打印 75 个随机大写和小写字母,每行 25 个。我想我已经解决了所有的逻辑,但是每当我运行它时,格式都被关闭,并且不是每行打印 25 个字符,而是打印一个随机数。到目前为止,这是我的代码:
char allLetters[] = new char[3700];
for(int i = 1; i <= 75; i++) { //Begin for loop
int max = 122;
int min = 65;
allLetters[i] = (char)(Math.random() * (max - min) + min);
if(i % 25 != 0){
if (allLetters[i] <= 90) {
System.out.printf("%s,",allLetters[i]);
}
if (allLetters[i] >= 97) {
System.out.printf("%s,",allLetters[i]);
}
} //Close if
else {
if (allLetters[i] <= 90) {
System.out.printf("%s\n",allLetters[i]);
}
if (allLetters[i] >= 97) {
System.out.printf("%s\n",allLetters[i]);
}
}
} //End for
目前,输出类似于:
U,i,y,e,v,T,G,p,P,a,U,G,e,B,w,U,o,F,G,w,j,m,R
O,X,w,w,u,p,t,g,X,J,R,c,w,I,d,H,R,m,y,b,o
C,p,M,F,X,U,v,O,a,Y,F,E,x,s,x,k,C,b,D,R,r,H
除了 i 之外,我还尝试过使用不同的变量,玩弄数字等,但我似乎找不到逻辑中导致格式化的确切缺陷。任何帮助将不胜感激!
最佳答案
你的逻辑问题在于,即使你不打印它,你也会计算每个选定的字符。 90 到 97 之间的 ASCII 字符(不包括在内)不是字符,您可以正确地跳过打印它们。然而,循环仍在计算这些迭代,就好像已打印了有效的字母一样。这会导致输出中的计数不正确。
下面的代码片段中使用的解决方法是继续循环选择字符,直到我们真正获得小写或大写字母。然后我们才会继续你之前的逻辑。
char allLetters[] = new char[3700];
int max = 122;
int min = 65;
for (int i = 1; i <= 75; i++) {
char next;
do {
next = (char)(Math.random() * (max - min) + min);
} while (next > 90 && next < 97);
allLetters[i] = next;
if (i % 25 != 0) {
System.out.printf("%s,", next);
}
else {
System.out.printf("%s\n", next);
}
}
Demo
关于java - 使用 Array[i] 逻辑进行格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47861293/