你为什么要声明" Integer int1"在我可以在onCreate和onClick方法中使用它之前?

时间:2015-04-22 17:11:59

标签: java android calculator

还有另外一个与此相关的答案,但我对此并不了解。我对编码相关的所有事情都很新,所以请放轻松。 我有什么:

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);
    }
}

所以在Float ansft = ft1,它说它无法解析符号。我在想,为什么?所以我尝试的是做与num1text,num2text和ans相同的事情,所以我输入:Float ft1;。现在突然可以解决这个问题了。我只是想知道是否有人可以解释它,因为我认为如果我了解其背后的逻辑,它将在未来有很大的帮助。

2 个答案:

答案 0 :(得分: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()));
}

答案 1 :(得分:0)

您的方法public void add(View v){中未定义

ft1以使其可访问,请尝试将方法更改为public void add(View v, Float ft1){

您也可以将Float ft1;作为属性。

检查java范围以获取更多详细信息。