2016-07-25 6 views
-2

イム作る電卓アプリと毎回の私のアプリのプリントがNull私は(Edittext)アプリを起動して、初​​めて数の画面をクリックしてくださいはNull(Number)のEditText

を示し

enter image description here

:ここ

null(num)は自分のアプリケーションのスクリーンショットであることを示しています

主な活動:

package com.example.user.calculator; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import java.util.regex.Pattern; 

public class MainActivity extends AppCompatActivity { 
private EditText _screen; 
private String display; 
private String currentOperator = ""; 
private String result = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    _screen = (EditText)findViewById(R.id.textView); 
    _screen.setText(display); 
} 

private void updateScreen() { 
    _screen.setText(display); 


} 

public void onClickNumber(View v) { 
    if (result != ""){ 
     clear(); 
     updateScreen(); 

} 
    Button b = (Button)v; 
    display += b.getText(); 
    updateScreen(); 
} 


private boolean isOperator(char op){ 
    switch (op){ 
     case '+': 
     case '-': 
     case 'X': 
     case '/': return true; 
     default: return false; 
    } 
} 

public void onClickOperator(View v){ 

    if(display == "") return; 

    Button b =(Button)v; 
    if (result != ""){ 
     String _display = result; 
     clear(); 
     display = _display; 
    } 

    if(currentOperator != "") { 
     Log.d("CalcX", ""+display.charAt(display.length()-1)); 
     if(isOperator(display.charAt(display.length()-1))){ 
      display = display.replace(display.charAt(display.length()-1), b.getText().charAt(0)); 
      updateScreen(); 
      return; 
     }else { 
      getResult(); 
      display = result; 
      result = ""; 
    } 
     currentOperator = b.getText().toString(); 
    } 
    display += b.getText(); 
    currentOperator = b.getText().toString(); 
    updateScreen(); 

} 

private void clear(){ 

    display = ""; 
    currentOperator = ""; 
    result = ""; 

} 



public void onClickClear(View v) { 

    clear(); 
    updateScreen(); 

} 

private double operate(String a, String b, String op) { 
    switch (op) { 

     case "+": 
      return Double.valueOf(a) + Double.valueOf(b); 
     case "-": 
      return Double.valueOf(a) - Double.valueOf(b); 
     case "X": 
      return Double.valueOf(a) * Double.valueOf(b); 
     case "/": 
      try { 
       return Double.valueOf(a)/Double.valueOf(b); 
      } catch (Exception e) { 
       Log.d("Calc", e.getMessage()); 
      } 
     default: 
      return -1; 
    } 
} 

private boolean getResult(){ 
    if(currentOperator == "") return false; 
    String[] operation = display.split(Pattern.quote(currentOperator)); 
    if (operation.length < 2) return false; 
    result = String.valueOf(operate(operation[0], operation[1], currentOperator)); 
    return true; 
} 

public void onClickEqual(View v){ 
    if(display == "") return; 
    if(!getResult()) return; 
    _screen.setText(display + "\n" + String.valueOf(result)); 
} 


} 
+0

トップに表示値= ""を設定してください –

+0

また、あなたは他の多くのエラーを表示します(まあ、misbehavioursは正しい言葉です)。あなたの文字列比較は単純に機能しません。 Javaで文字列を比較する方法をお読みください。 –

答えて

2

設定display""

private String display = ""; 

に最初null

に初期化された文字列変数だから""で文字列を初期化することにより、あなたのEditTextnullを取得するために防ぐことができます

0

デフォルト値を 'display'フィールドに指定する必要があります。デフォルトでは、javaはフィールド変数にnullを与えます。あなたがnullの文字列を表示しようとした場合には、 'NULL'

private String display= ""; 

private String display="123"; 
0
_screen = (EditText)findViewById(R.id.textView); 
**_screen.setText(display);** //remove this line because you have to set number after user entry... 

OR

列表示=ヌルとして表示されます。変数を初期化..あなたがstrここ

if(str.equals("")) // for check == condition 
if(!str.equals("")) // for check != condition 

、同じよう .equals("")を使用して Stringを比較する必要が

0

はあなたdisplay変数に初期化する必要が宣言部では、あなたのresultdisplaycurrentOperator

です=""。つまり、display = ""

これはあなたを助けるかもしれません。