是否可以缩短此代码?
Is it possible to shorten this code?
我不完全是 Java 的初学者,但我也不是专家。有没有什么方法可以缩短这段代码,使其占用更少 space 甚至可能更少的行数?
JOptionPane.showMessageDialog(null, "The student's names are: "
+ roster[0][0] + " " + roster[1][0] + ", "
+ roster[0][1] + " " + roster[1][1] + ", "
+ roster[0][2] + " " + roster[1][2] + ", and "
+ roster[0][3] + " " + roster[1][3] + ".");
您可以执行以下操作: 最初分配您不想重复的普通语句。然后遍历花名册。
String rosterString= "The student's names are: ";
for(int i=0;i<= roster.length;i++){
for(int j=0;j<= roster[i].length;j++){
rosterString += (roster[i][j] + " ");
if (i == 1 && j < 2) {
rosterString += ", ";
}
else if (i == 1 && j == 2) {
rosterString += ", and";
}
else if (i == 1 && j == 3) {
rosterString += ".";
}
else {
rosterString += " ";
}
}
}
然后将 rosterString
传递给您的方法。
String rosterString = "";
for(int i = 0; i < roster[0].length; i++) {
rosterString += roster[0][i] + " " + roster[1][i] + ", ";
}
该代码将创建一个包含名称和逗号的字符串。然后您可以添加 if 语句来检查它是否接近尾声以将 ,
更改为 and
或 .
StringBuilder message = new StringBuilder("The student's names are: ");
for (int i = 0; i < roster[0].length; i++) {
message
.append(roster[0][i])
.append(" ")
.append(roster[1][i]);
if (i < roster[0].length - 1)
message.append(", ");
if (i == roster[0].length - 2)
message.append("and ")
}
message.append(".");
JOptionPane.showMessageDialog(null, message.toString());
可能是这样的。如您所见,您并没有真正保存任何行,但显然代码更灵活,因为它可以考虑可变长度的花名册。
让我们一步步重构代码
引入变量以消除重复。
T[] col1 = roster[0];
T[] col2 = roster[1];
String content = col1[0] + " " + col2[0] + ", "
+ col1[1] + " " + col2[1] + ", "
+ col1[2] + " " + col2[2] + ", and "
+ col1[3] + " " + col2[3] + ".";
JOptionPane.showMessageDialog(null,"The student's names are: " + content);
将字符串连接分成多个赋值,那么除最后一个赋值外所有赋值都相同。
int i = 0;
String content = "";
content += col1[i] + " " + col2[i] + ", ";i++;
content += col1[i] + " " + col2[i] + ", ";i++;
content += col1[i] + " " + col2[i] + ", ";i++;
content += "and " + col1[i] + " " + col2[i] + ".";i++;
使用三元运算符使多重赋值一致。
int i = 0;
String content = "";
content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++;
content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++;
content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++;
content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++;
使用 while 循环删除重复项。
int i = 0;
String content = "";
while(i<=3) {
content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", ");
i++;
}
用 for 循环替换 while 循环。
String content = "";
for (int i = 0; i <= 3; i++) {
content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", ");
}
引入变量使代码更易读。
String content = "";
for (int i = 0; i <= 3; i++) {
String prefix = i == 3 ? "and " : "";
String current = col1[i] + " " + col2[i];
String suffix = i == 3 ? "." : ", ";
content += prefix + current + suffix;
}
内联只使用一次的变量col1
& col2
:
String content = "";
for (int i = 0; i <= 3; i++) {
String prefix = i == 3 ? "and " : "";
String current = roster[0][i] + " " + roster[1][i];
String suffix = i == 3 ? "." : ", ";
content += prefix + current + suffix;
}
将幻数3
替换为常量,最终代码如下:
final int last = 3;
String content = "";
for (int i = 0; i <= last; i++) {
String prefix = i == last ? "and " : "";
String suffix = i == last ? "." : ", ";
String current = roster[0][i] + " " + roster[1][i];
content += prefix + current + suffix;
}
JOptionPane.showMessageDialog(null, "The student's names are: " + content);
我不完全是 Java 的初学者,但我也不是专家。有没有什么方法可以缩短这段代码,使其占用更少 space 甚至可能更少的行数?
JOptionPane.showMessageDialog(null, "The student's names are: "
+ roster[0][0] + " " + roster[1][0] + ", "
+ roster[0][1] + " " + roster[1][1] + ", "
+ roster[0][2] + " " + roster[1][2] + ", and "
+ roster[0][3] + " " + roster[1][3] + ".");
您可以执行以下操作: 最初分配您不想重复的普通语句。然后遍历花名册。
String rosterString= "The student's names are: ";
for(int i=0;i<= roster.length;i++){
for(int j=0;j<= roster[i].length;j++){
rosterString += (roster[i][j] + " ");
if (i == 1 && j < 2) {
rosterString += ", ";
}
else if (i == 1 && j == 2) {
rosterString += ", and";
}
else if (i == 1 && j == 3) {
rosterString += ".";
}
else {
rosterString += " ";
}
}
}
然后将 rosterString
传递给您的方法。
String rosterString = "";
for(int i = 0; i < roster[0].length; i++) {
rosterString += roster[0][i] + " " + roster[1][i] + ", ";
}
该代码将创建一个包含名称和逗号的字符串。然后您可以添加 if 语句来检查它是否接近尾声以将 ,
更改为 and
或 .
StringBuilder message = new StringBuilder("The student's names are: ");
for (int i = 0; i < roster[0].length; i++) {
message
.append(roster[0][i])
.append(" ")
.append(roster[1][i]);
if (i < roster[0].length - 1)
message.append(", ");
if (i == roster[0].length - 2)
message.append("and ")
}
message.append(".");
JOptionPane.showMessageDialog(null, message.toString());
可能是这样的。如您所见,您并没有真正保存任何行,但显然代码更灵活,因为它可以考虑可变长度的花名册。
让我们一步步重构代码
引入变量以消除重复。
T[] col1 = roster[0]; T[] col2 = roster[1]; String content = col1[0] + " " + col2[0] + ", " + col1[1] + " " + col2[1] + ", " + col1[2] + " " + col2[2] + ", and " + col1[3] + " " + col2[3] + "."; JOptionPane.showMessageDialog(null,"The student's names are: " + content);
将字符串连接分成多个赋值,那么除最后一个赋值外所有赋值都相同。
int i = 0; String content = ""; content += col1[i] + " " + col2[i] + ", ";i++; content += col1[i] + " " + col2[i] + ", ";i++; content += col1[i] + " " + col2[i] + ", ";i++; content += "and " + col1[i] + " " + col2[i] + ".";i++;
使用三元运算符使多重赋值一致。
int i = 0; String content = ""; content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++; content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++; content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++; content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++;
使用 while 循环删除重复项。
int i = 0; String content = ""; while(i<=3) { content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); i++; }
用 for 循环替换 while 循环。
String content = ""; for (int i = 0; i <= 3; i++) { content+= (i==3?"and ":"") + col1[i]+" "+col2[i] + (i==3?".":", "); }
引入变量使代码更易读。
String content = ""; for (int i = 0; i <= 3; i++) { String prefix = i == 3 ? "and " : ""; String current = col1[i] + " " + col2[i]; String suffix = i == 3 ? "." : ", "; content += prefix + current + suffix; }
内联只使用一次的变量
col1
&col2
:String content = ""; for (int i = 0; i <= 3; i++) { String prefix = i == 3 ? "and " : ""; String current = roster[0][i] + " " + roster[1][i]; String suffix = i == 3 ? "." : ", "; content += prefix + current + suffix; }
将幻数
3
替换为常量,最终代码如下:final int last = 3; String content = ""; for (int i = 0; i <= last; i++) { String prefix = i == last ? "and " : ""; String suffix = i == last ? "." : ", "; String current = roster[0][i] + " " + roster[1][i]; content += prefix + current + suffix; } JOptionPane.showMessageDialog(null, "The student's names are: " + content);