2015-04-22 59 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

相关问题