2015-04-22 53 views
0

還有與此相關的另一個答案,但我不明白這一點..我對與編碼有關的所有事情都很陌生,所以請儘量輕鬆一點。 我有什麼:爲什麼在我可以在onCreate和onClick方法中使用它之前,必須聲明「Integer int1」?

package com.example.robert.rekenmachine; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.EditText; 
import android.view.View; 
import android.widget.TextView; 





public class MainActivity extends ActionBarActivity { 

    EditText num1text, num2text; 
    TextView ans; 




    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     num1text = (EditText)findViewById(R.id.num1text); 
     num2text = (EditText)findViewById(R.id.num2text); 
     ans = (TextView)findViewById(R.id.ans); 
     Integer int1 = Integer.parseInt(num1text.getText().toString()), int2 = Integer.parseInt(num2text.getText().toString()); 
     Float ft1 = Float.parseFloat(num1text.getText().toString()), ft2 = Float.parseFloat(num2text.getText().toString()); 


    } 

    public void add(View v){ 
     Float ansft = ft1 

     ans.setText(Integer.toString(1)); 


    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

因此,在浮動ansft = FT1,它說,它無法解析符號。我在想,爲什麼?所以我試着做的是和num1text,num2text和ans做的一樣,所以我輸入:Float ft1 ;.現在它突然可以解決這個符號。我只是想知道是否有人能夠解釋它,因爲我認爲如果我明白其背後的邏輯,將來會有很大的幫助。

+0

難道不是編譯或只是一個IDE錯誤? – Antoniossss

+2

這是因爲'ft1'是'onCreate()'中定義的局部變量。所有方法局部變量不能在該方法之外訪問。你可以訪問'num1text'和'num2text',因爲它們是實例變量(類級別)。在開始一些嚴肅的編碼之前,你應該研究變量的範圍:) – Arkantos

回答

0

FT1是不是在你的方法public void add(View v){定義,使其可以訪問,請嘗試將方法更改爲public void add(View v, Float ft1){

你也可以把Float ft1;作爲一個屬性。

檢查Java範圍以獲取更多詳細信息。

+1

這很有效,謝謝! – user2296226

+0

@ user2296226確保接受答案作爲解決方案。 – CubeJockey

1

ans在類的範圍{ ... }中聲明,並且可以通過所有方法作爲對象的字段訪問。

int1是一種方法中的局部變量。該方法的範圍僅限於其大括號{ ... },並且該變量將在調用該方法期間存活。 外面無法訪問。

現在人們可以使int1成爲一個字段。但是您可能想要獲取文本字段num1text的最新值。

private int getInt1() { 
    int int1 = Integer.parseInt(num1text.getText().toString()); 
    return int1; 
} 

或者乾脆:

private int getInt1() { 
    return Integer.parseInt(num1text.getText().toString()); 
} 

,做

public void add(View v) { 
    int int1 = getInt1(); // Take latest value. 
    ans.setText(Integer.toString(int1)); 

或更短

ans.setText(Integer.toString(getInt1())); 
} 
+2

啊哈,我想我明白了。我想我應該閱讀一些電子書或某些東西來獲得一些知識,因爲我甚至不知道這些基本的東西 – user2296226

相關問題