2016-12-16 1 views
-4

私は、文字列のそれぞれを削除し、画面がなくなっても表示されない場合でも結果を表示するために、いくつかのコードを使用しようとします。例1234私はすべてをクリアします。私はそれぞれを削除したい。 より多く挿入する場合例:1234556画面の幅が不足しています。それは12345が画面の幅に従うことを示します。なぜ私はそれぞれを削除することはできませんし、画面の幅を使い果たしたときの結果を参照してください?

public class MainActivity extends Activity implements View.OnClickListener { 
    Button one, two, three, four, five, six, seven, eight, nine, zero, add, 
      sub, mul, div, equal, decimal, cancel, sin, cos, tan, open_bracket, close_bracket,del,log,fac,sqrt,e,pi,mod; 
    EditText disp; 
    boolean stateError; 
    boolean lastNumeric; 
    boolean lastDot; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     one = (Button) findViewById(R.id.one); 
     two = (Button) findViewById(R.id.two); 
     three = (Button) findViewById(R.id.three); 
     four = (Button) findViewById(R.id.four); 
     five = (Button) findViewById(R.id.five); 
     six = (Button) findViewById(R.id.six); 
     seven = (Button) findViewById(R.id.seven); 
     eight = (Button) findViewById(R.id.eight); 
     nine = (Button) findViewById(R.id.nine); 
     zero = (Button) findViewById(R.id.zero); 

     add = (Button) findViewById(R.id.add); 
     sub = (Button) findViewById(R.id.sub); 
     mul = (Button) findViewById(R.id.mul); 
     div = (Button) findViewById(R.id.div); 
     equal = (Button) findViewById(R.id.equal); 
     decimal = (Button) findViewById(R.id.decimal); 

     sin = (Button) findViewById(R.id.sin); 
     cos = (Button) findViewById(R.id.cos); 
     tan = (Button) findViewById(R.id.tan); 
     open_bracket = (Button) findViewById(R.id.open_bracket); 
     close_bracket = (Button)findViewById(R.id.close_bracket); 

     disp = (EditText) findViewById(R.id.txtScreen); 
     cancel = (Button) findViewById(R.id.cancel); 
     del = (Button) findViewById(R.id.del); 


     try { 
      one.setOnClickListener(this); 
      two.setOnClickListener(this); 
      three.setOnClickListener(this); 
      four.setOnClickListener(this); 
      five.setOnClickListener(this); 
      six.setOnClickListener(this); 
      seven.setOnClickListener(this); 
      eight.setOnClickListener(this); 
      nine.setOnClickListener(this); 
      zero.setOnClickListener(this); 

      add.setOnClickListener(this); 
      sub.setOnClickListener(this); 
      mul.setOnClickListener(this); 
      div.setOnClickListener(this); 
      equal.setOnClickListener(this); 
      decimal.setOnClickListener(this); 
      cancel.setOnClickListener(this); 
      del.setOnClickListener(this); 
      sin.setOnClickListener(this); 
      cos.setOnClickListener(this); 
      tan.setOnClickListener(this); 
      open_bracket.setOnClickListener(this); 
      close_bracket.setOnClickListener(this); 
      log.setOnClickListener(this); 
      sqrt.setOnClickListener(this); 
      e.setOnClickListener(this); 
      pi.setOnClickListener(this); 
      fac.setOnClickListener(this); 
      mod.setOnClickListener(this); 

     } catch (Exception e) { 
     } 
    } 


    @SuppressLint("SetTextI18n") 
    @Override 
    public void onClick(View v) { 
     Editable str = disp.getText(); 

     switch (v.getId()) { 
      case R.id.zero: 
       str = str.append(zero.getText()); 
       disp.setText(str); 
       break; 
      case R.id.one: 
       str = str.append(one.getText()); 
       disp.setText(str); 
       break; 
      case R.id.two: 
       str = str.append(two.getText()); 
       disp.setText(str); 
       break; 
      case R.id.three: 
       str = str.append(three.getText()); 
       disp.setText(str); 
       break; 
      case R.id.four: 
       str = str.append(four.getText()); 
       disp.setText(str); 
       break; 
      case R.id.five: 
       str = str.append(five.getText()); 
       disp.setText(str); 
       break; 
      case R.id.six: 
       str = str.append(six.getText()); 
       disp.setText(str); 
       break; 
      case R.id.seven: 
       str = str.append(seven.getText()); 
       disp.setText(str); 
       break; 
      case R.id.eight: 
       str = str.append(eight.getText()); 
       disp.setText(str); 
       break; 
      case R.id.nine: 
       str = str.append(nine.getText()); 
       disp.setText(str); 
       break; 
      case R.id.add: 
       str = str.append(add.getText()); 
       disp.setText(str); 
       break; 
      case R.id.sub: 
       str = str.append(sub.getText()); 
       disp.setText(str); 
       break; 
      case R.id.mul: 
       str = str.append(mul.getText()); 
       disp.setText(str); 
       break; 
      case R.id.div: 
       str = str.append(div.getText()); 
       disp.setText(str); 
       break; 
      case R.id.decimal: 
       str = str.append(decimal.getText()); 
       disp.setText(str); 
       break; 
      case R.id.sin: 
       str = str.append(sin.getText()); 
       disp.setText(str); 
       break; 
      case R.id.cos: 
       str = str.append(cos.getText()); 
       disp.setText(str); 
       break; 
      case R.id.tan: 
       str = str.append(tan.getText()); 
       disp.setText(str); 
       break; 
      case R.id.buttonSqr: 
       str = str.append(String.valueOf(Math.E)); 
       disp.setText(str); 
      case R.id.open_bracket: 
       str = str.append(open_bracket.getText()); 
       disp.setText(str); 
       break; 
      case R.id.close_bracket: 
       str = str.append(close_bracket.getText()); 
       disp.setText(str); 
       break; 
      case R.id.del: 
       if (disp.getText().toString().length() > 1) { 
        String screen_new = disp.getText().toString().substring(0, disp.getText().toString().length() - 1); 
        disp.setText(screen_new); 
       } else { 
        disp.setText(""); 
       } 
       lastNumeric = false; 
       stateError = false; 
       lastDot = false; 
      case R.id.cancel: 
       disp.setText(""); 
       break; 
      case R.id.equal: 
       String val; 
       val = disp.getText().toString(); 
       Expression result ; 
       val = val.replaceAll("x", "*").replaceAll("÷", "/").replaceAll("mod","%").replaceAll("e","Math.E") 
         .replaceAll("pi",String.valueOf(Math.PI)); 
       try { 
        result = new ExpressionBuilder(val).build(); 
        disp.setText(Double.toString(result.evaluate())); 
      /* size_num = result.calculate(); */ 
       }catch (ArithmeticException ex) { 
        // Display an error message 
        disp.setText("Error"); 
        stateError = true; 
        lastNumeric = false; 

       } 

       break; 

     } 

    } 
} 

+1

私は、あなたの条件文で 'lastNumeric'と関係があると思います。しかし、投稿する際には「動作しません」と定義する必要があります。そのようなものは絶対に何もせず、クラッシュし、望ましくない出力などを与えます。 – codeMagic

+0

sin(30)を実行すると画面に「エラー」メッセージが表示されますか? –

+0

あなたは私に例を挙げることができますか?私はたくさんの検索を試みますが解決策はありません。 – Nico

答えて

0

@codeMagicは、それはおそらくあなたの問題を与えているlastNumericだ言うように。 lastNumericまたはstateErrorを明示的に初期化しているわけではありません。デフォルトではfalseに初期化されています。あなたの状態がif (lastNumeric && !stateError)の場合、最初に操作を押すと、lastNumericは数字キーを押すまでfalseになるので、決して実行されません。

これを回避するには、lastNumericをtrueに初期化します。それを行う場合は、なぜそれが本当であるかについてのコメントを追加してください。もう1つは、条件に変数を追加することです。

if ((firstTime || lastNumeric) && !stateError) 

あなたはその後、数字キーが押された後、それを偽に設定してくださいあなたの宣言でfirstTime = true;を設定します。

+0

yes.itしばらくの間、私は再び操作を選択しようとします。それでも表示されない12-16 23:52:02.260 18193-18193/emseyha.example.com.calculaterproject W/TextView:TextViewはテキスト選択をサポートしていません。アクションモードがキャンセルされました。 – Nico

+0

この回答が最初の問題を解決しましたか? – Gary99

+0

はい。それは大丈夫です最初のクリックしてから2番目の同じをクリックして前に – Nico

関連する問題