2015-05-01 121 views
-1

當我運行程序時, 那麼只有第一個輸入和50, 這兩個數字相乘。 爲什麼不爲循環工作? ...............當我運行它代碼blocks.useing C編程。有用。想象一下,首先輸入1 = 3,輸入2 = 30.i期望這個輸出3 * 30 = 90,3 * 31 = 93,3 * 32 = 96 .............. ...................... 3 * 49 = 147。但輸出顯示只有3 * 49 = 147。那就是問題爲什麼不做「循環」的工作?

......................

................. .....

package com.example.akibmahmud.namota; 

import android.app.AlertDialog; 
import android.media.MediaPlayer; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ScrollView; 
import android.widget.TextView; 


public class MainActivity extends ActionBarActivity implements MediaPlayer.OnCompletionListener { 
    EditText et1,et2; 
    private Button bt; 
    ScrollView sv; 
    TextView tv; 
    private MediaPlayer mp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     et1= (EditText) findViewById(R.id.firsteditText); 
     et2= (EditText) findViewById(R.id.secondeditText); 
     bt= (Button) findViewById(R.id.button); 
     sv= (ScrollView) findViewById(R.id.scrollView); 
     tv= (TextView) findViewById(R.id.textView); 
     bt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String et11=et1.getText().toString(); 
       String et22=et2.getText().toString(); 
       if (!et11.equals("") && !et22.equals("")){ 
        int input1=Integer.parseInt(et11); 
        int input2=Integer.parseInt(et22); 
        int i,k,r; 
        for (i = input1; i <=input1 ; i++) { 
         for (k =input2; k <= 50; k++) { 
          tv.setText(+i+"*"+k+"="+i*k+"/n"); 
         } 
        } 

       }else{ 
        play(); 
       } 
      } 
     }); 
     setup(); 
    } 

    private void play(){ 
     mp.start(); 
     bt.setEnabled(false); 
    } 
    private void loadClip(){ 
     try { 
      mp=MediaPlayer.create(this,R.raw.ok); 
      mp.setOnCompletionListener(this); 
     }catch (Throwable t){ 
      goBlooey(t); 
     } 
    } 
    private void setup(){ 
     loadClip(); 
     bt.setEnabled(true); 
    } 
    private void goBlooey(Throwable t){ 
     AlertDialog.Builder builder=new AlertDialog.Builder(this); 
     builder 
       .setTitle("Exception!") 
       .setMessage(t.toString()) 
       .setPositiveButton("OK",null) 
       .show(); 
    } 


    @Override 
    public void onCompletion(MediaPlayer mp) { 
     setup(); 
    } 
} 

請幫幫我。 我會嘗試很多次。 但它不起作用。

+0

你在期待什麼?什麼是「不工作」?如果你繼續在for循環中設置「setText」,它會變得如此之快以至於你看不到許多值。 – tachyonflux

+0

想象一下,首先輸入1 = 3,輸入2 = 30.i期望這個輸出3 * 30 = 90,3 * 31 = 93,3 * 32 = 96 ................. ................... 3 * 49 = 147。但輸出顯示只有3 * 49 = 147。那就是問題 –

+0

所以基本上如果我有一個整數,我把它設置爲1,然後我把它設置爲2,你會期望它有1和2? – tachyonflux

回答

1

在你的代碼

for (i = input1; i <=input1 ; i++) { 
         for (k =input2; k <= 50; k++) { 
          tv.setText(+i+"*"+k+"="+i*k+"/n"); 
         } 
        } 

由於i等於input1你循環它i <= input1它不會循環。更改i的初始值。

也分享你的輸入值喜歡什麼是inpu1的價值,並輸入2你試圖

+0

我是第一個輸入任何數字的輸入。第二個輸入到50年代中的任何一個。 –

+1

sice你不斷地設置電視,你無法看到過渡。添加某種延遲並打印日誌 – user3653796

0

你的問題是,你是一樣快的CPU允許(這是很多的地獄速度超過設置文本你可以看到)。我們可以通過在迭代之間添加延遲來解決這個問題。像這樣:

new Thread() { 
    float timeToWaitBetweenIterationsInSeconds = 1; 
    public void run() { 
     for (i = input1; i <=input1 ; i++) { 
      for (k =input2; k <= 50; k++) { 
       MainActivity.this.runOnUiThread(new Runnable() { 
        public void run() {     
         tv.setText(+i+"*"+k+"="+i*k+"/n"); 
        } 
       } 
       Thread.currentThread().sleep((int) timeToWaitBetweenIterationsInSeconds*1000); 
      } 
     } 
    } 
}.start(); 

這個片段生成一個新的線程,併爲我們的循環的每次迭代它會做算術,並顯示答案,然後繼續下一個迭代之前等待指定的時間量。

另外,請注意 - 正如@ user3653796在他的回答中所暗示的那樣 - 您的第一個循環將無法如您所期望的那樣工作。我不確定你想要用第一個循環做什麼,但是如果你只是想在你的第一個循環中循環3次和30次,正如你的問題所述;我們可以簡單地:

for(int i : new int[]{3, 30}) 
+0

I輸入1輸入任意數字。如果這些條件滿足第一個循環,則第二個循環可以是。輸入2的數量以輸入將乘法的數字。 1將增加輸入2的值,它將一直保持,直到值的條件增加1爲止。並且會有一個與輸入1相乘的結果。當條件不正確時,可以看到所有結果,並且程序將會到來跳出循環。但我只看到最後的輸出值。爲什麼? –

+0

因爲您沒有附加到文本,所以在每次迭代後都會擦除它並覆蓋它。如果你想附加文本,我建議嘗試'tv.append(String str)',而不是'tv.setText(String str)'。我希望我能夠幫助你進一步的循環,但我仍然不明白你想要完成什麼。 – MeetTitan