【问题标题】:Iterate through an array in backwards direction, decreasing counter without using an if statement. Inverse of a modulus反向遍历数组,减少计数器而不使用 if 语句。模数的倒数
【发布时间】:2016-11-17 17:01:10
【问题描述】:

我有一个数组和两个按钮( Next 和 Previous )。 当您单击下一个按钮时,mCurrent 索引会更新(++),并且光标指向列表中的下一项,而上一个按钮则相反。

String[] fruits = {"Pineaple", "Orange", "Banana", "Apple"};
int mCurrentIndex = 0;

这是按钮的事件处理程序:

 nextButton.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View view) {
         mCurrentIndex = (mCurrentIndex + 1) % fruits.length;
         updateFruit();
     }
 });



prevButton.setOnClickListener(new View.OnClickListener() {


 @Override
    public void onClick(View view) {
        mCurrentIndex = (mCurrentIndex - 1);
        if(mCurrentIndex < 0){
            mCurrentIndex = fruits.length - 1;
        }
        updateFruit();
    }

 });

代码运行正常。但我想知道是否有办法将previousButton代码重构为类似于nextButton代码(使其更短),通过消除if语句并替换为模数的倒数(即如果它存在)它仍然可以正常工作。

在每种情况下,当 mCurrentIndex 到达数组末尾时都会重置。

【问题讨论】:

    标签: java android arrays


    【解决方案1】:

    代码运行正常。但我想知道是否可以 是一种将 previousButton 代码重构为类似于 nextButton 的方法 代码(使其更短),通过消除 if 语句并替换 类似于模数的倒数(即如果它存在)并且它 仍然可以正常工作。

    mCurrentIndex = (mCurrentIndex + fruits.length - 1) % fruits.length;
    

    应该这样做

    【讨论】:

    • 非常感谢我正在寻找的东西。
    【解决方案2】:

    我认为你可以使用

    public void onClick(View view) {
        mCurrentIndex = (fruits.length + (mCurrentIndex - 1)) % fruits.length;
        updateFruit();
    }
    

    【讨论】:

      【解决方案3】:

      使用一种方法,

        updateFuit(int refIndex) {
             mCurrentIndex = (mCurrentIndex + refIndex) % fruits.length;
             // Do rest of the updates..
        }
      

      对于按钮,

       nextButton.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
              updateFruit(1);
         }
       });
      
       prevButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
              updateFruit(fruits.length - 1);
        });
      

      【讨论】:

      • 看起来很有前途...我会试试的
      猜你喜欢
      • 2018-03-06
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2016-09-09
      • 1970-01-01
      相关资源
      最近更新 更多