2016-11-15 116 views
1

我想在1个gui对话框中打印多行while循环。在gui对话框中打印while循环的多行(Java)

这是我目前

package Tempconv1; 
import javax.swing.JOptionPane; 
public class TimesTables 
{ 

    public static void main(String[] args) 
    { 
     int num1 = 0, counter = 0, total = 0; //Declaring Variables 
     String str; //String for ShowInputDialog 

     str = JOptionPane.showInputDialog("Insert a number"); //Asks user to input number 
     num1 = Integer.parseInt(str); 


      //Calculating number inputs 
      while (counter <12) 
      { 
       counter = counter + 1; 
       total = counter * num1; 
       String multimsg = ("The calculation is " + num1 + " x " + counter + "=" + total); 
       JOptionPane.showMessageDialog(null, multimsg); 
      } 
      JOptionPane.showMessageDialog(null, "All Done"); 
    } 


} 

它的工作原理,但打印出来的代码“的计算是5X1 = 5”,然后打开一个新的消息框,显示“计算是5×2 = 10”。 我希望它打印出来

计算是5X1 = 5 计算为5×2 = 10 等

所有内1文本框

回答

0

你告诉你的程序做的是创建一个字符串的个人计算,然后创建一个对话框。然后为每个循环再次做。

您需要将所有消息构建到循环中的一个字符串中,然后在循环外部创建对话框。

String multimsg = ""; 
    while (counter <12) 
    { 
     counter = counter + 1; 
     total = counter * num1; 
     multimsg += ("The calculation is " + num1 + " x " + counter + "=" + total); 
    } 
    JOptionPane.showMessageDialog(null, multimsg); 

你可能要考虑使用StringBuilder的或类似的是关于建立消息字符串更高效。 (https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

+0

大加赞赏,我明白现在我在做什么错。想想我已经盲目地盯着它看了这么久。 但是,这只是部分工作,因为它显示他们全部在1行,而不是每个答案的新行。 我怎么能把它放到每一行? –

+0

啊我想通了。 我添加' “\ n” 个'在multimsg串的末尾,以便它现在读取 'multimsg + =( “计算为” + NUM1 + “X” +计数器+ “=” +总+“\ n“);' 现在每一个都需要换行。 非常感谢您的帮助。 –

-1

循环之前:String multimsg = "";

在循环中的数学后:multimsg=multimsg+"The calculation is " + num1 + " x " + counter + "=" + total; 后while循环JOptionPane.showMessageDialog(null, multimsg);

-1

只建立循环内的味精,并保存到StringBuilder的。

public static void main(String[] args) 
{ 
    int num1 = 0, counter = 0, total = 0; //Declaring Variables 
    String str; //String for ShowInputDialog 

    str = JOptionPane.showInputDialog("Insert a number"); //Asks user to input number 
    num1 = Integer.parseInt(str); 
    StringBuilder sb = new StringBuilder(); 

    //Calculating number inputs 
    while (counter <12) 
    { 
     counter = counter + 1; 
     total = counter * num1; 
     sb.append("The calculation is ").append(num1).append(" x ").append(counter).append("=").append(total).append(" "); 

    } 
    JOptionPane.showMessageDialog(null, sb.toString()); 
    JOptionPane.showMessageDialog(null, "All Done"); 
} 
+0

这也只是部分工作,因为它显示在1行而不是每个答案的新行。我怎么能把它放到每一行? 不知道关于stringbuilder,所以感谢给我一个它如何工作的例子。 –

0

问题是您正在显示while循环内的消息。与循环while的语法可能有点混乱。

如果使用的java 8可以用一个IntStream更换而/计数器,你可以通过在集电体接合的字符串撰写邮件:

String message = IntStream.rangeClosed(1, 12) 
          .mapToObj(i -> "The calculation is " + num1 + "x" + i + " = " + i * num1) 
          .collect(Collectors.joining(", ")); 

第一行创建整数从流第1行到第12行。第二行将每个数字映射到单个文本消息。最后一行用一个连接它们串接所有的个人信息,

你的主要方法将是这个样子:

public static void main(String[] args){ 
    int num1 = 0, counter = 0, total = 0; //Declaring Variables 
    String str; //String for ShowInputDialog 

    str = JOptionPane.showInputDialog("Insert a number"); //Asks user to input number 
    num1 = Integer.parseInt(str); 


    //Calculating number inputs 
    String message = IntStream.rangeClosed(1, 12) 
          .mapToObj(i -> "The calculation is " + num1 + "x" + i + " = " + i * num1) 
          .collect(Collectors.joining(", ")); 

    JOptionPane.showMessageDialog(null, message); 
    JOptionPane.showMessageDialog(null, "All Done"); 

}

+0

我正在为我的大学课程做到这一点,所以他们期待我们使用While循环。 我最大的问题是他们开始使用BlueJ并导入一个我们只能在大学内部使用的库,所以我必须重新学习我对标准Java库的了解。 但是,这是表示赞赏。谢谢。 –

+0

哦,我明白了。我可能仍然会用IntStream来做,并告诉教授这是一个更好的解决方案,但我可能是一个恼人的学生,所以这可能是不好的建议。至少你现在知道有比使用while循环更好的工具。您可以通过提供帮助您的答案来表示赞赏。至于库,看起来这段代码片段至少是所有标准的Java。 –