Java:在字符串变量中累积输出模式?

时间:2013-05-20 20:08:01

标签: java string for-loop design-patterns joptionpane

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

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 个答案:

答案 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)再次将整个内容添加到另一个StringBuildertoString。完成后,第二个\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(对于其他帖子来说,这是一个更好的选择)。