2015-05-01 192 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