【问题标题】:variable not available despite public method尽管有公共方法,但变量不可用
【发布时间】:2014-02-24 11:27:08
【问题描述】:

float targetVolumepublic void 方法中创建,但无法在另一个 public void 方法中解析...

    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
        public void run() {
            float x = (float) Math.random();
            if (x < 0.5){
                float targetVolume = 0;
            } else {
                float targetVolume = 1;
            }

            scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
                public void run() {
                    if (targetVolume.equals (1)){
                        mp.setVolume(startingVolume+volumeIncrement, startingVolume+volumeIncrement);
                    } else {
                        mp.setVolume(startingVolume-volumeIncrement, startingVolume-volumeIncrement);
                    }
                }
            }, 0, 1, TimeUnit.SECONDS);
        }
    }, 0, 5, TimeUnit.SECONDS);

我该如何解决这个问题?

编辑:我可以通过将 final 修饰符添加到浮点数来解决问题:

        scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
        public void run() {
            float x = (float) Math.random();
            final float targetVolume=(x < 0.5)?0:1;

            scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
                public void run() {
                    if (targetVolume >startingVolume){
                        startingVolume = startingVolume+volumeIncrement;
                        mp.setVolume((startingVolume), (startingVolume));
                        }
                    else if (targetVolume < startingVolume){
                        startingVolume = startingVolume-volumeIncrement;
                        mp.setVolume((startingVolume), (startingVolume));
                        }              
                }
            }, 0, 1, TimeUnit.SECONDS);
        }
    }, 0, 5, TimeUnit.SECONDS);

但是,每次运行任务时,最终的 float targetVolume 现在是否保持相同的值(零或 1)?我需要这个值随机改变...

【问题讨论】:

标签: java android scope public


【解决方案1】:

您已在该方法本地声明它

cheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
    public void run() {
        float x = (float) Math.random();
        if (x <0.5){
            float targetVolume =0;}

将其声明为类的成员变量以具有类范围。这意味着在方法之外的任何地方定义它(通常就在 onCreate() 之前,对于 Activity)。

Read about Java variable scope

【讨论】:

  • 这确实使浮动可用,但是最终浮动 targetVolume 现在每次运行任务时都保持相同的值(零或 1)吗?我需要这个值随机改变...
  • 它不需要是final,因为它是一个成员变量。不要让它static,你应该没事
  • 变量需要在该方法中创建,以便它在设定的时间间隔内发生变化......
  • 不,它只需要在那里初始化(给定一个值)。将其声明为成员变量(float targetVolume;
【解决方案2】:

改为:

scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
    public void run() {
        float x = (float) Math.random();
        final float targetVolume=(x < 0.5)?0:1;

        scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
            public void run() {
                if (targetVolume==1){
                    mp.setVolume(startingVolume+volumeIncrement, startingVolume+volumeIncrement);
                } else {
                    mp.setVolume(startingVolume-volumeIncrement, startingVolume-volumeIncrement);
                }
            }
        }, 0, 1, TimeUnit.SECONDS);
    }
}, 0, 5, TimeUnit.SECONDS);

【讨论】:

  • 这确实使浮动可用,但是最终浮动 targetVolume 现在每次运行任务时都保持相同的值(零或 1)吗?我需要这个值随机改变...
猜你喜欢
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 2016-08-29
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多