Java 带空间变量的循环让我感到困惑? System.out.println(“输入学生姓名、注册号和分数”); for(int i=0;i

Java 带空间变量的循环让我感到困惑? System.out.println(“输入学生姓名、注册号和分数”); for(int i=0;i,java,Java,看起来像这样,使用空格将name变量填充到8字符 变量j统计总共需要8个空格的数量 注意- 这不是最好的方法。每次调用name[i]=name[i]+”;都会生成一个新的字符串对象。您应该使用StringBuilder或使用org.apache.commons.lang.StringUtils 例如: System.out.println("Enter the Name,Reg no and marks of the students"); for(int i=0;i<no_stu

看起来像这样,使用空格将name变量填充到
8
字符

变量
j
统计总共需要8个空格的数量

注意- 这不是最好的方法。每次调用
name[i]=name[i]+”;
都会生成一个新的字符串对象。您应该使用
StringBuilder
或使用
org.apache.commons.lang.StringUtils

例如:

System.out.println("Enter the Name,Reg no and marks of the students");
    for(int i=0;i<no_students;i++)
    {
        name[i]=br.readLine();
        len=name[i].length();
        if(len<8)
        {
            space=8-len;
        }
        for(int j=1;j<=space;j++)
        {
            name[i]=name[i]+" ";
        }
        reg[i]=br.readLine();
        marks[i]=br.readLine();

    }

如果name的长度小于8,则用空格填充name变量

例如,我的名字是Madhur,它将存储为 “M”,“a”,“d”,“h”,“u”,“r”,“r”

空间变量不表示字符“”

相反,空格是一个整数,它包含需要填充的空格数 空间=8-6=2


因此,循环将运行两次,以用字符“”填充第7和第8个位置。

简单,让我们浏览一下:

name[i] = StringUtils.rightPad(name[i], 8, ' ')
name[i]
-为了简单起见,我们将其命名为
name
-现在等于读取行,
len
等于其长度

name[i]=br.readLine();
len=name[i].length();
对于每个空格,如果空格为
2
则循环两次,在
名称
后面加上“”

代码的基本目标是使每个
名称
至少有
8个
字符长,如果较短,则右键填充

这段代码在循环中提交了字符串连接的主要错误,这是非常低效的,应该始终避免

此代码似乎也有一个bug,
空格
仅在
if
中设置,并且未在循环中声明。以
2
10
为例,如果名称的长度为
2
字符
空格
将设置为
6
。如果名称的长度为
10
字符,则下一次迭代将设置为
6
将跳过
if
,并用
6
空格右键填充
10
字符长名称

进一步注意,这一切都可以通过使用
String.format
%-8s
格式来实现,该格式将格式化为字符串并右键填充最多8个字符:

for(int j=1;j<=space;j++)
{
    name[i]=name[i]+" ";
}
更重要的一点是,这段代码是在并行数组中存储一个对象,这在OO代码中永远不是答案。应该使用
对象


简而言之,如果您不理解它,请删除它,然后重新开始。

这段代码是谁编写的?他可能知道原因和原因。如果名称少于8个字符,则会用空格填充,直到名称正好包含8个字符。计数器变量j计数!显然,这部分代码附加了指定的空格数ode>space变量。看看
space
是如何创建的,它试图通过填充空格使每个名称至少有8个字符长。这很难看,因为它可以简单地用String.format(“%-8s”,name[i]”完成).但是伙计们,变量空间实际上并没有在代码中的任何地方被使用,它只是存在于循环中,就是这样..更糟糕的是,代码运行时没有任何错误,包括“space”处的空格填充从未实际使用过..但是Madhur,变量空间仅在for循环的初始化中使用,而不是在循环中使用。在for循环中,我们只是使用了好的老式“”??那么为什么要使用空格呢?请看我更新的答案,空格是一个整数,表示循环将运行的次数。为什么一个10个字符的名称要用6个空格来填充呢?请再次仔细阅读我的解释,并按照我所做的步骤来完成代码。这里没有魔法,只是非常简单的代码。拿一张纸和一张纸如果你知道怎么做,你可以使用一个调试器——这基本上只是一张花哨的纸。既然Java中已经有无数的内置方法来实现这个目标,为什么要建议一个新手程序员导入一个随机库呢?这不值得投反对票,但仍然是很糟糕的建议。@Boristeider你是对的-String.format()是一种更好的方法。尽管我为Apache Commons辩护,但它并不是随机的。我认为Commons提供的几乎所有功能都被Java 8和Google Guava的组合所取代。我认为,在大多数情况下,Commons已经过时,应该避免使用。尤其是Lang。
for(int j=1;j<=space;j++)
{
    name[i]=name[i]+" ";
}
name[i] = String.format("$-8s", br.readLine());