1

可能有一个问题涵盖了这一点,但我在搜索中没有找到它。这个想法是在给定用户输入的字符和行数的情况下显示一个模式,如下所示:

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);
    }

}

然后,我必须让它在每次用户点击“确定”时重复这种模式,并在他们点击“取消”时退出。我想我可以做到这一点,如果我能弄清楚字符串变量中的累积。非常感谢帮忙。

4

4 回答 4

0

累积在字符串变量中称为StringBuilder。它允许您快速将内容附加到 StringBuilder 中,您可以从中调用 toString() 将其转换回字符串。

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";
    }
}
于 2013-05-20T20:12:32.023 回答
0

作为一种高级方法,你可以试试这个。创建两个StringBuilder实例。向上循环,直到达到所需lines的为止。对于每次迭代,将 an 附加X到第一个迭代中,StringBuilder然后将其全部内容附加到StringBuilder另一个迭代中(通过toString),其中 a\n为换行符。在该循环完成后,为分隔符添加 2 个空行。然后,循环直到第一个StringBuilder为空,删除每次迭代的最后一个字符(通过)并通过plus再次deleteCharAt(sb.length()-1)将整个内容附加到另一个。完成后,第二个应该有你想要的模式。StringBuildertoString\nStringBuilder

int lines = 4;
StringBuilder sb = new StringBuilder();

StringBuilder pattern = new StringBuilder();
for(int i = 0; i < lines; i++){
  sb.append("X");
  pattern.append(sb.toString() + "\n");
}
pattern.append("\n\n");
pattern.append(sb.toString() + "\n");
while(sb.length() > 0){
  sb.deleteCharAt(sb.length() - 1);
  pattern.append(sb.toString() + "\n");
}

System.out.println(pattern.toString());
于 2013-05-20T20:19:49.803 回答
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。

于 2013-05-20T20:47:29.230 回答
0

你的循环应该看起来更像:

for (i=1; i<=lines; i++) {

            for (n=0; n<i; n++) {

                output1 += in; 
            }
       output += "\n";
        }

假设您不能使用 StringBuilder (根据其他帖子,这是一个更好的选择)。

于 2013-05-20T21:01:03.343 回答