0

次のようなアクティビティがあります。コピーしないでください。別のクラスから3つの変数を取得し、(a、b)、(b、c)、(c、d)、(a、b、c)のgcdを計算します。次に、方程式を因数分解し、5つの異なるtextViewsに文字列を与えます。また、x.squareをx 2に改善するのに役立つ場合は、私を助けてください。すべての提案を歓迎します。

package com.aditya.blabla;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class AlternateForms extends Activity {
AnotherClass ec = new AnotherClass ();
int aa = ec.geta();
int bb = ec.getb();
int cc = ec.getc();


int abhcf = HCF(aa, cc), bchcf = HCF(cc, cc), achcf = HCF(aa, cc),
        abchcf = HCF(abhcf, cc);
String altform1,altform2,altform3,altform4,altform5;
TextView t1, t2, t3, t4, t5;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.alternate);
    t1 = (TextView) findViewById(R.id.textView1);
    t2 = (TextView) findViewById(R.id.textView2);
    t3 = (TextView) findViewById(R.id.textView3);
    t4 = (TextView) findViewById(R.id.textView4);
    t5 = (TextView) findViewById(R.id.textView5);
    altform1 = abhcf + "x(" + aa / abhcf + "x+" + bb / abhcf + ")+"
            + cc;
    setProgress(20);
    altform2 = aa + "x.square" + bchcf + "(" + bb / bchcf + "x" + cc
            / bchcf + ")" + cc;
    setProgress(30);
    altform3 = achcf + "(" + aa / achcf + "x.square" + bb / achcf
            + ")" + cc + "x";
    setProgress(40);
    altform4 = abchcf + "(" + aa / abchcf + "x.square" + bb / abchcf
            + "x" + cc / abchcf + ")";
    setProgress(50);
    altform5 = abchcf + "(" + "x" + "(" + aa / abchcf + "x" + bb
            / abchcf + ")" + cc / abchcf + ")";
    if (abhcf != 1) {
        t1.setText(altform1);

    }
    if (bchcf != 1) {
        t2.setText(altform2);

    }
    if (achcf != 1) {
        t3.setText(altform3);

    }
    if (abchcf != 1) {
        t4.setText(altform4);
        t5.setText(altform5);

    }

}

private int HCF(int m, int n) {
    // TODO Auto-generated method stub
    int hcf = 0;
    while (n != 0) {
        hcf = n;
        n = m % n;
        n = hcf;
    }
    return hcf;
}

}

エラーはありませんが、多くのプロセスが必要で、ハングしているように見え、強制的に閉じるダイアログにこれを処理するための提案がありますか?

4

3 に答える 3

1

メソッド内のへHCF(m, n)のすべての呼び出しを. メソッドからの割り当てもすべて入れます。that のメソッド内のfor eachにすべてのステートメントを配置します。ご存知かもしれませんが、s のメソッドは UI スレッドで実行されますが、別のスレッドで実行されます。doInBackground(Void... params)AsyncTaskaltformNonCreate(Bundle s)doInBackground(Void... params)ifsetText(CharSequence s)TextViewonPostExecute(Void nothing)AsyncTaskonPostExecute(Void nothing)AsyncTaskdoInBackground(Void... params)

スケルトン実装は次のとおりです。

public class AlternateFormsTask extends AsyncTask<Void, Void, Void> {
    int abhcf, bchcf, achcf, abchcf;
    int aa, bb, cc;
    AnotherClass ec = new AnotherClass ();

    @Override
    public Void doInBackground(Void.... params){
        aa = ec.geta();
        bb = ec.getb();
        cc = ec.getc();
        // ...insert all your calls to HCF(m, n) here
        return null
    }

    // If all the processing in doInBackground really takes that long
    // you may want to intersperse some calls to AsyncTask's publishProgress
    // to update the user as to the progress of the app, otherwise it will appear
    // just as hung as before, just without the FC dialogs.

     @Override
     public void onPostExecute(Void nothing){
        //....do all your setText stuff here
     }
}
于 2012-12-12T16:23:43.937 に答える
0

時間がかかる場合は、使用せずに常に「ハング」しているように見えますThreadsThreads終了後、GUIを使用および更新します。あなたはでできるだけ少ない仕事をするべきですMainThread

于 2012-12-12T15:00:34.213 に答える
0

hcfメソッドを次のように変更する必要があります

static int HCF(int a, int b) {
while (b != 0) {
int t = b;
b = a % b;
a = t;
}
return a;
}
于 2012-12-13T09:33:53.027 に答える