java - 使用 Array[i] 逻辑进行格式化

标签 java formatting logic

我正在尝试构建一个程序,打印 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/

相关文章:

c++ - 如何在 C++ 中优雅地格式化字符串,使其四舍五入到小数点后 6 位,并修剪掉额外的 '0' 或 '9'

c - 在 fprintf 中格式化输出

java - 获取已经随机生成矩阵的整数

python - 如何在Python逻辑语句中概念化分组

java - 使用 JSTL 标签(点字符)转义 JSP EL

java - Thorntail:带有限定符 @Any 的 LoggingFraction 类型的依赖关系不满足

java - 在 Vaadin 7 项目中使用 TinyMCEEditor Wrapper 时如何更改 TinyMCETextField 中的默认字体大小?

java - 签署 Jars 以解决内部应用程序的未知发布者问题

java - 从 NumberFormat 格式中删除货币字符()

mysql - PHP 表单数据库逻辑