Java 来自C++;背景 我正在开发我的第一个Android应用程序,它来自2年的C++学校。

Java 来自C++;背景 我正在开发我的第一个Android应用程序,它来自2年的C++学校。,java,android,scope,Java,Android,Scope,代码如下所示: double total = 100000000000L; for(long i = 0L; i < diff; i++) { total += 1.8; } countView.setText(NumberFormat.getInstance().format(total)); final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override

代码如下所示:

double total = 100000000000L;
for(long i = 0L; i < diff; i++) {
    total += 1.8;
}
countView.setText(NumberFormat.getInstance().format(total));

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
     @Override
     public void run() {

         if (total += 1.8 < 200000000000L) {
            handler.postDelayed(this, 1000L);
            return;
         }

         handler.removeCallbacks(this);
     }
 }, 1000L);
双倍总计=100000000000升;
用于(长i=0L;i
在C++中,我可以重用全部变量——没有问题——它在相同的范围内。但是在Java中,我得到一条错误消息,我试图访问一个内部类。尝试将total声明为public或static会导致错误,即此处不允许使用修饰符


为什么我可以在我声明的下面使用total,而不是下面几行

如果total是调用处理程序的类字段,那么它应该可以正常工作。如果它是在调用处理程序的函数中声明的,请尝试将其声明为“final”。唯一的问题是,通过将它声明为final,您将无法修改它的值,就像在run()方法中那样。

在Java中,如果您希望从本地类(如示例中的
Runnable
)访问封闭类的成员(即示例中的
total
),这些成员必须声明为
final


对于您的代码,请重写代码(如果可以的话),以使
total
成为一个整数,并使用
final AtomicInteger total
,而不是
double total
。如果你不能重写,我会查一查。

你的
总数到底在哪里?你没有包括那个吗。。。当然,
total
可以是外部类中的一个字段,并且一切都应该正常。。编辑:是的,正如@Codebender所写的,我们不知道你在方法中定义了
total
?或者作为一个字段(当然不是,但这只是一个假设),total在顶部声明,并在运行函数check中的if语句中使用。这个answer total只是一个原始数据类型,在代码块顶部声明。java是否将原始数据类型视为类,如果是,为什么我可以在for循环中使用它,而不是在函数中使用它?