可能有一个问题涵盖了这一点,但我没有在搜索中找到它。我们的想法是为用户输入字符和行数显示一个模式,如下所示:
x
xx
xxx
xxxx
xxxx
xxx
xx
x
但我需要使用JOptionPane来做到这一点。这就是我所拥有的:
import javax.swing.JOptionPane;
public class loopPattern {
public static void main(String[] args) {
String in, num, output1 = null, output2 = "";
int lines = 0;
int i, n = 1;
in = JOptionPane.showInputDialog("Please enter the character for the pattern:");
num = JOptionPane.showInputDialog("Please enter the number of lines in the pattern:");
lines = Integer.parseInt(num);
for (i=1; i<=lines; i++) {
for (n=1; n<=lines; n++) {
output1 = (n +"\n");
}
}
for (i=lines; i>=1; i--){
for (n=lines; n>=1; n--){
output2 = (n +"\n");
}
}
JOptionPane.showMessageDialog(null, output1 +output2);
}
}
我必须在每次用户点击“确定”时重复此模式,并在他们点击“取消”时退出。如果我能弄清楚字符串变量中的累积,我想我能做到这一点。非常感谢你的帮助。
答案 0 :(得分:0)
在字符串变量中累积称为StringBuilder。它允许您快速将内容附加到StringBuilder中,您可以从中调用toString()将其转换回String。
StringBuilder sb = new StringBuilder();
for (i=1; i<=lines; i++) {
for (n=1; n<=lines; n++) {
sb.append(n +"\n");
}
}
如果你不能使用StringBuilder,那么使用一个String变量,并使用“+”运算符为它赋予另一个字符串的值。这可以用“+ =”
来缩短String string = new String();
string = string + "stuff to go on the string";
// or as a shorthand equivalent
string += "stuff to go on the string";
/// loop example
String myoutput = new String();
for (i=1; i<=lines; i++) {
for (n=1; n<=lines; n++) {
myoutput += n +"\n";
}
}
答案 1 :(得分:0)
作为一种高级方法,你可以试试这个。创建两个StringBuilder
个实例。循环直到达到所需的lines
。对于每次迭代,将X
附加到第一个StringBuilder
,然后将StringBuilder
的全部内容附加到另一个内容中(通过toString
){{1}对于换行符。循环结束后,为分隔符添加2个空行。然后,循环直到第一个\n
为空,删除每次迭代的最后一个字符(通过StringBuilder
)并通过deleteCharAt(sb.length()-1)
再次将整个内容添加到另一个StringBuilder
中toString
。完成后,第二个\n
应该有你想要的模式。
StringBuilder
答案 2 :(得分:0)
如果使用StringBuilder太高级,只需使用字符串即可获得相同的效果:
String output1 = "";
for (i=1; i<=lines; i++) {
for (n=1; n<=lines; n++) {
output1 = output1.concat(n +"\n");
// note the below commented out code should also work:
//output1 = output1 + n + "\n";
}
}
这比使用StringBuilder效率低得多,因为将为内循环的每次迭代创建一个新字符串并将其分配给output1。
答案 3 :(得分:0)
你的循环shuold看起来更像:
for (i=1; i<=lines; i++) {
for (n=0; n<i; n++) {
output1 += in;
}
output += "\n";
}
假设你不能使用StringBuilder(对于其他帖子来说,这是一个更好的选择)。