2014-01-05 92 views
0

在應用程序中,我有不同的活動頁面,要求用戶輸入數字數據。我認爲數據存儲爲下面這樣我就可以用它在最後的活動:結果:NaN不起作用?

public void onClick(View v) { 
    String variable1 = input.getText().toString(); 
    Double.parseDouble(variable1); //stores information put into variable 
     { Intent myintent = (new Intent(step1.this,step2.class)); 
     myintent.putExtra("variable1",variable1); 
     startActivity(myintent); 

我做的所有其他活動,此相同的過程,直至最後一個,我有:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);{ 
    setContentView(R.layout.activity_iie); 
    Bundle extras = getIntent().getExtras(); //retrieves variables stored for formula 

    if(extras !=null){ 
     double variable1 = extras.getDouble("VARIABLE1"); 
     double vari2 = extras.getDouble("VARI2"); 
     double vari3 = extras.getDouble("VARI3"); 
     double finalvari = extras.getDouble("finalvari"); 
     double solution= ((((vari2 - vari1)/(vari3) + finalvari))); 

     String lastString = "Result:" + solution; //prints out 
     TextView lastText = (TextView) findViewById(R.id.solution1); 
     lastText.setText(lastString); 
    } 

我沒有任何錯誤,但是當我到達這最後的活動時,它打印出「結果:NaN」。我試圖找出它爲什麼打印NaN;一切都設置爲一個雙。

這是什麼原因造成的?

更新 @Melquiades

是的,我換成了雙打的字符串,如下圖所示:

'c.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     double variable1 = Double.parseDouble(input.getText().toString()); //stores information put into variable 
     { Intent myintent = (new Intent(step1.this,step2.class)); 
     myintent.putExtra("variabele1",variabele1); 
     startActivity(myintent); 
     ' 

然後在我是想打印的回答最後一個活動:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);{ 
    setContentView(R.layout.activity_iie); 
    Bundle extras = getIntent().getExtras(); //retrieves variables  stored   formula 

if (extras != null){ 
     double variable1 = extras.getDouble("variable1"); 
     double vari2 = extras.getDouble("vari2"); 
     double vari3 = extras.getDouble("vari3"); 
     double engagement = extras.getDouble("engagement1"); 
     double solution= ((((vari2-variable1)/(vari3))+finalvari)); 
      String lastString = "Result:" +solution; //prints out 
      TextView lastText= (TextView) findViewById(R.id.solution1); 
        lastText.setText(lastString); 

決定發佈一些更多的鍋像你所建議的那樣提供幫助。

回答

2

在發射端,您只需設置一個額外的variable1

在接收端,您可以從額外嘗試四個值:

double variable1 = extras.getDouble("VARIABLE1"); 
double vari2 = extras.getDouble("VARI2"); 
double vari3 = extras.getDouble("VARI3"); 
double finalvari = extras.getDouble("finalvari"); 

getDouble()將返回0.0如果該鍵不存在。

現在,在這裏

double solution= ((((vari2-vari1)/(vari3)+finalvari))); 

你零,這在浮點運算導致的結果是不是數字(NAN)劃分。

+0

如上所述,我已經設置了所有額外的變量,只是爲了節省時間讓你們閱讀代碼,我沒有發佈剩餘的變量。就被設置而言,上面提到的每個其他變量的編碼與變量1相同(編碼類似於代碼的第一位)。 如果我將vari3設置爲5並將finalvari設置爲1(當我運行其他活動以輸入應用程序中的變量數據時),我不明白我是如何除以零的。感謝您的上述職位。 –

+0

好的,那麼只需在那裏設置一個調試器斷點,然後檢查變量以查看NaN到達表達式的位置。然後一步一步來回顧變量值的來源。 – laalto

+0

我改變了方程式,現在我得到0.0當我不像你說的那樣分裂時。但是我很困惑,爲什麼現在我得到了0.0,我對其他變量做了和我一樣的變量1。 –

1

關鍵問題是把String到意圖:

String variable1 = input.getText().toString(); 
Double.parseDouble(variable1); //stores information put into variable 
//... 
myintent.putExtra("variable1",variable1); <- variable1 is a string, 

,當你用getDouble()以後提取它,你會得到,報價:

0.0當沒有所需類型的映射存在對於給定的密鑰

因此,您應該將double代入您的意圖:

double variable1 = Double.parseDouble(input.getText().toString()); 
myintent.putExtra("variable1",variable1); 

請注意,使用相同的密鑰字符串映射是非常重要的,當你提取您加倍,即使用「變量1」,區分大小寫:

double extractedVar1 = extras.getDouble("variable1"); 

你可以使用額外。containsKey()來驗證您的映射是否存在。

+0

所以刪除字符串部分,而是包括你剛剛提到的? –

+0

是的。我的意思是你期望你的意圖「雙」,不是嗎?所以,把'double'放在那裏,而不是'String'。例如:'double variable1 = Double.parseDouble(input.getText()。toString());'if(variable1> 0){//輸入intent} – kiruwka

+0

要去現在嘗試一下,稍後再回到此主題,並嘗試一下,非常感謝! –

0

所有的建議都是正確的。但是,你正在做一個根本的錯誤...

當你發送你的變量,你這樣做:

myIntent.putExtra("variable1", variable1); 

那麼當你收到,你這樣做:

double variable1 = extras.getDouble("VARIABLE1"); 

你的密鑰不一樣。 'variable1'和'VARIABLE1'是不相等的,因此,而不是變量1的值,你可能會得到0,而你所有的計算都是錯誤的。

由於這個原因,對按鍵使用靜態決賽是一個很好的做法。聲明在您的第一項活動:

public static final String KEY_VARIABLE1 = "variable1"; 

在意圖插入時使用它:

myIntent.putExtra(KEY_VARIABLE1, variable1); 

和檢索時:

double variable = extras.getDouble(ActivityWhereThisKeyIsDeclared.KEY_VARIABLE1); 

做它所有的變量。

+0

我修復了鑰匙,但我仍然得到NaN。例如,當我通過我使用的變量的活動時,(50,100,5,1),所以當我用手插入時,我得到(((100-50)/ 5)+1)。我是否必須爲關鍵數據進行統計總決賽才能得到NaN(稍後會回頭修正),但只是試圖擺脫NaN。 –

+0

你有沒有使用雙打而不是字符串在哪裏建議?在接收活動中添加Log.d()並輸出變量1,變量2,變量3和終值的值 - 它們是什麼?另外,在你的文章中添加當前代碼。 – Melquiades

+0

如Melquiades所建議的,如果您確定放置了'double'而不是'String',則打印出您提取的內容。您可以使用intent提取值。'getDoubleExtra'不是先提取'Bundle',而是提取'Bundle'。這樣你可以指定默認值,所以你不會得到0.0,以防它們不存在。 – kiruwka