2016-11-15 12 views
1

1つのGUIダイアログボックスでwhileループの複数の行を印刷したいとします。 複数の行のwhileループをguiダイアログ(Java)で印刷する

この

は「計算が5X1 = 5である」とし、「計算は5X2 = 10です」と表示する新しいメッセージボックスを開き、私は現在、

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 計算がある5X2 = 10 は

答えて

0

は何をするようにプログラムを言っていることは、文字列を作成

すべてのテキストボックス1の内部にあるなどダイアログボックスを作成します。次に、各ループごとに再度実行します。

ループ内のすべてのメッセージを1つの文字列に作成してから、ループの外にダイアログボックスを作成することをお勧めします。

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

ああ、私はそれを理解しました。 multimsg文字列の最後に '\ n"を追加して、今度は 'multimsg + =("計算は "+ num1 +" x "+ counter +" = "+ total +" \ n ")); となり、それぞれに新しい行が追加されました。 ありがとうございました。 –

-1

:数学の後、ループ内のString multimsg = "";

multimsg=multimsg+"The calculation is " + num1 + " x " + counter + "=" + total; とビルドだけループ内のmsgとのStringBuilderに保存JOptionPane.showMessageDialog(null, multimsg);

-1

whileループの後に。

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行目までです.2行目はすべての数値を個々のテキストメッセージにマップします。最後の行がでそれらを結合して、すべての個々のメッセージを連結し、

あなたの主な方法は次のようになります:

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

私は大学のコースのためにやっているので、彼らは私たちがそれのためのループを使用することを期待しています。 私の最大の問題は、BlueJを使用して大学内でしか使用できないライブラリをインポートすることから、標準のJavaライブラリで知っていたことを再学習する必要があることです。 しかし、これは感謝しています。ありがとうございました。 –

+0

ありがとうございます。私はおそらくまだIntStreamでそれを行い、より良い解決策であることを教授に伝えるだろうが、私はおそらく刺激的な学生だったので、それは悪いアドバイスかもしれない。少なくとも、whileループを使用するよりも優れたツールがあることを、あなたは認識しています。あなたはいつもあなたを助けた答えをアップアップすることによって、感謝を示すことができます。ライブラリについては、このコードスニペットが少なくとも標準のJavaすべてであるようです。 –

関連する問題