2016-11-15 67 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。 –