2017-03-07 79 views
-9

我最近開始學習android工作室,我做了一個應用程序,顯示如果一個數字是三角形或正方形。問題是,當用戶沒有把任何東西放入文本框,然後我的應用程序崩潰!這是爲什麼發生?我需要改變什麼?應用程序崩潰時空

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

public class MainActivity extends AppCompatActivity { 

    class Number { 

     int number; 

     public boolean isSquare() { 

      double squareRoot = Math.sqrt(number); 

      if (squareRoot == Math.floor(squareRoot)) { 

       return true; 

      } else { 

       return false; 

      } 


     } 

     public boolean isTriangular() { 

      int x = 1; 

      int y = 1; 

      while (y < number) { 

       x++; 

       y = y + x; 

      } 

      if (y == number) { 

       return true; 

      } else { 

       return false; 

      } 



     } 


    } 

    public void testNumber(View view) { 

     String msg = ""; 

     EditText usersNumber = (EditText) findViewById(R.id.usersNumber); 

     Number myNumber = new Number(); 

     myNumber.number = Integer.parseInt(usersNumber.getText().toString()); 


     if (usersNumber.getText().toString().isEmpty()) { 


      msg = myNumber.number + "Please eneter a Number!"; 

     } else { 


      if (myNumber.isSquare()) { 

       if (myNumber.isTriangular()) { 

        msg = myNumber.number + "is both square and triangular!"; 
       } else { 

        msg = myNumber.number + "is square but not traingular"; 


       } 


      } else { 


       if (myNumber.isTriangular()) { 

        msg = myNumber.number + "is triangular but not suqare !"; 
       } else { 

        msg = myNumber.number + "is neither"; 
       } 


      } 




     } 

     Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show(); 

    } 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 
+0

發佈您的錯誤日誌 – Phil3992

+0

爲什麼你添加了ios標籤?它不是obj-c或swift代碼! –

+0

只是一個簡單的提示:將你的類'Number'放在它自己的.java文件中。沒有理由把它放在你的'Activity'類中。並檢查[參數化構造函數](http://stackoverflow.com/questions/34775298/what-is-the-use-of-a-parameterized-constructor-in-java) –

回答

2

如果此時用戶不會在你的EditText文件輸入一個號碼,usersNumber.getText().toString()回報空白不能被縮減爲一個數字。

這就是爲什麼你在這個聲明的例外:Integer.parseInt(usersNumber.getText().toString());

更多詳情請看here。 要停止你的應用程序的崩潰,你可以使用一個try { ... } catch {...}塊以防萬一您的代碼:

try { 
myNumber.number = Integer.parseInt(usersNumber.getText().toString()); 


     if (usersNumber.getText().toString().isEmpty()) { 


      msg = myNumber.number + "Please eneter a Number!"; 

     } else { 


      if (myNumber.isSquare()) { 

       if (myNumber.isTriangular()) { 

        msg = myNumber.number + "is both square and triangular!"; 
       } else { 

        msg = myNumber.number + "is square but not traingular"; 


       } 


      } else { 


       if (myNumber.isTriangular()) { 

        msg = myNumber.number + "is triangular but not suqare !"; 
       } else { 

        msg = myNumber.number + "is neither"; 
       } 


      } 




     } 
}catch (NumberFormatException ne){ 
    //handle the exception 
} 

或它解析爲一個整數之前簡單地檢查空:

if (!usersNumber.getText().toString().equals("")){ 
myNumber.number = Integer.parseInt(usersNumber.getText().toString()); 
} else { 
    myNumber.number = 0; 
} 
+0

是的,謝謝這最後工作!但是,如果用戶輸入任何內容,則顯示「0請輸入一個數字」如何將其更改爲「請輸入數字」 – dlxassassins

+0

if(usersNumber.getText()。toString()。isEmpty()){ msg =「Please給一個數字!「; – Jens

+0

功能齊全!我希望感謝您的幫助;)這是我第一次使用這個網站!不期望得到正確的答案,這很快:) – dlxassassins

-1

把你想代碼到try catch語句中,這樣,如果發生錯誤,應用程序不會崩潰。

try 
{ 
    //Insert code here// 
} 
catch(Exception e) 
{ 
    //Handle error here// 
} 
+0

不要捕捉超類異常。總是要抓住它的具體子類 – Jens