2017-07-20 93 views
1

私は2つの異なるEditTextフィールドで指定された2つの整数の最大公約数を表示するアンドロイドプログラムを書こうとしています。最初にボタンでやったことがありました。(あなたは、以下のコードでonclickリスナーがコメントアウトしているのを見ることができます)。今私はこれをしたい:両方のEditTextsが空でないとアプリチェックを自動的に計算を開始し、gcdを表示します。 EditTextのいずれかのフィールドに入力を開始すると、Butyアプリケーションがクラッシュします。また、私はTextChangeListenerをEditTextの1つにのみ追加しようとしました。いずれかのフィールドからすべての入力を削除してから、もう一度アプリがクラッシュするまで、すべてが有効です。私はアンドロイドの開発を理解し始めているだけで、おそらく私は間違って何かをした...インターネット上で見つかった例を変更することによって主にこのアプリを作った誰も私を助けることができますか?おかげ複数のEditTextに入力がある場合、TextViewをどのように変更するのですか?

MainActivity.java

public class MainActivity extends Activity 

{ 
    EditText a; 
    EditText b; 
    TextView gcdResult; 
    Button calculateGcd; 
    int a, b, gcdValue 

    TextWatcher textWatcher = new TextWatcher(){ 
     @Override 
     public void afterTextChanged(Editable s){} 

     @Override 
     public void beforeTextChanged(CharSequence s,int start, int count, int after){} 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count){ 

      AutoCalculateGcd(); 

     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 


     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     a = (EditText)findViewById(R.id.aText1); 
     b = (EditText)findViewById(R.id.bText1); 
     gcdResult = (TextView)findViewById(R.id.resultTextView1); 
     calculateGcd = (Button)findViewById(R.id.calcButton1); 

     /* calculateGcd.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v){ 
       AutoCalculateRatio(); 
      } 
     });*/ 

     a.addTextChangedListener(textWatcher); 
     b.addTextChangedListener(textWatcher); 

    } 



    //Euclidean alghorithm to find gcd 
    public static int gcd(int a, int b) { 
     if (b == 0) return w; 
     else return gcd(b a % b); 

     } 
    public static boolean isInputNotEmpty(EditText a, EditText b){ 
     String a = a.getText().toString(); 
     String b = b.getText().toString(); 
     if(a.equals("") && b.equals("")){ 
      return false; 
    } 
    else{ 
     return true; 
    } 

    } 
    public void AutoCalculateGcd(){ 
     if(isInputNotEmpty(a, b)){ 
      a = Integer.parseInt(width.getText().toString()); 
      b = Integer.parseInt(height.getText().toString()); 
      gcdValue = gcd(a, b); 
      ratioResult.setText(Integer.toString(gcdValue)); 
     } 
     else{ 
      //Toast.makeText(this, "No input", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
+1

これはコンパイルされますか? 'EditText a、int a、EditText b、int b' – mihail

+1

これはコンパイルできませんので、プログラムを書くことはできません。私は問題を手伝ってくれることをうれしく思いますが、あなたのアプリを構築しています...いいえ、ありがとう。 – Tacolibre

+0

@mihailすみません。これはかなり奇妙なことかもしれませんが、事は休暇から家に帰るときにこの質問を書いて、メモリからソースコードを書きました。私が家に帰るときに解決策を求めていました。私はコードの主なポイントを思い出して、それを再構築しようとしました。 – Vykintazo

答えて

2

:一つのアプローチは、のような何かをするだろうもしあれば(||)が空であり、両方が空でない場合(& &)です。

2

あなたはスタックトレースを投稿する場合は役立つかもしれないが、私の推測では、あなたがInteger.parseInt()呼び出しからはNumberFormatExceptionを取得しているということです。あなたが知りたいので、あなたが

public static boolean isInputNotEmpty(EditText a, EditText b) { 
    String a = a.getText().toString(); 
    String b = b.getText().toString(); 
    if (a.equals("") || b.equals("")) { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

あるいは

public static boolean isInputNotEmpty(EditText a, EditText b) { 
    return !(a.getText().toString().isEmpty() || b.getText().toString().isEmpty()); 
} 

public static boolean isInputNotEmpty(EditText a, EditText b) { 
    String a = a.getText().toString(); 
    String b = b.getText().toString(); 
    if (a.equals("") && b.equals("")) { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

を交換する必要があり、実際に

try { 
     a = Integer.parseInt(width.getText().toString()); 
     b = Integer.parseInt(height.getText().toString()); 
     gcdValue = gcd(a, b); 
     ratioResult.setText(Integer.toString(gcdValue)); 
} catch (NumberFormatException e) { 
     ratioResult.setText("N/A") 
} 
関連する問題