2015-08-20 26 views
3

我想做一個應用程序拆分人民之間的法案,但每當我試圖在代碼中分兩個數字,它總是給我0.0。爲什麼是這樣?每當我分開我得到0.0

下面是代碼:

public class MainActivity extends Activity { 
    public int x = 0; 
    public double y = 1.00; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Button 
     Button btn = (Button) findViewById(R.id.button); 

     //EditText 
     EditText nop = (EditText) findViewById(R.id.editText); 
     EditText cob = (EditText) findViewById(R.id.editText2); 


     try{ 
      x = Integer.valueOf(nop.getText().toString()); 
     } catch (NumberFormatException e) { 
      x = 0; 
     } 

     try{ 
      y = Double.valueOf(cob.getText().toString()); 
     } catch (NumberFormatException e) { 
      y = 1.00; 
     } 


     //TextView 
     final TextView tv = (TextView) findViewById(R.id.textView); 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       Double z = (y/x); 
       tv.setText("You will each pay:" + (z)); 
      } 
     }); 

    } 
    } 
+2

也許你的'Integer.valueOf'方法拋出一個異常。那麼你總是有0.0 – MrT

+0

@mrT當你除以零時,你不會得到0.0。你會得到'NaN'或'Infinity'。 –

+0

在catch語句中分配'x = 0'有點危險,因爲這可能導致被零除,這將返回一個零除異常。 – HyperZ

回答

0

儘快從EditText獲取按鈕的點擊價值,否則的原因在於獲取的xy得到的值的代碼執行,你不會得到輸入的數值爲你啓動應用程序並沒有進一步取做。

做這個

final TextView tv = (TextView) findViewById(R.id.textView); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try{ 
       x = Integer.valueOf(nop.getText().toString()); 
      } catch (NumberFormatException e) { 
       x = 0; 
      } 

      try{ 
       y = Double.valueOf(cob.getText().toString()); 
      } catch (NumberFormatException e) { 
       y = 1.00; 
      } 

      Double z = (y/x); 
      tv.setText("You will each pay:" + (z)); 
     } 
    }); 
4

我的猜測是,你不點擊後評估值。你的try/catch的代碼應該在onclick方法中。

0

如果在下面的代碼的異常則x將是零。

try { 
    x = Integer.valueOf(nop.getText().toString()); 
} catch (NumberFormatException e) { 
    x = 0; 
} 

現在因爲異常的,你除以零&會得到無限不爲0.0

0

還要確保參與者的默認數量爲1不爲零。如果將其設置爲零,則最好不要進行除法並強制用戶輸入正確的數字,否則您必須捕獲零除異常。

public class MainActivity extends Activity { 
    public int x = 1; 
    public double y = 1.00; 
    public EditText nop; 
    public EditText cob; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Button 
     Button btn = (Button) findViewById(R.id.button); 

     //EditText 
     nop = (EditText) findViewById(R.id.editText); 
     cob = (EditText) findViewById(R.id.editText2); 

     //TextView 
     final TextView tv = (TextView) findViewById(R.id.textView); 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       try{ 
        x = Integer.valueOf(nop.getText().toString()); 
       } catch (NumberFormatException e) { 
        x = 1; 
       } 

       try{ 
        y = Double.valueOf(cob.getText().toString()); 
       } catch (NumberFormatException e) { 
        y = 1.00; 
       } 

       Double z = (y/x); 
       tv.setText("You will each pay:" + (z)); 
      } 
     }); 

    } 
} 
相關問題