gpt4 book ai didi

java - 功能改变输入

转载 作者:行者123 更新时间:2023-11-30 05:12:57 25 4
gpt4 key购买 nike

我想从一个号码转到另一个号码。例如,如果我从 6 开始,我的目标是 10,我想要一个函数,每次通过都会使我从 6 到 10,或者如果我的数字是 14,我的目标是 9,它会从 14 倒数到 9。我有(这是在Processing a Java Api中写的,但与常规Java本质上没有区别,绘制只是一个连续循环)

int x=100;
void draw(){
x=towards(x,10);
println(x);

}

int towards(int current ,int target){
if(current!=target){
if (current <target){
current=current+1;
}
else {
current=current-1;
}
}
return current;
}

这给了我我想要的结果,但我希望将所有内容都放在ward()函数的旁边。当我用变量替换 X 时,它当然会将其自身重置为静态变量。

总而言之,如何将变量传递给函数并让传递的变量在每次后续传递中发生变化。我已经研究了递归作为一种解决方案,但它只是给我带来了最终的解决方案。我可以将计数传递给数组,但也不想这样做。

最佳答案

Java 使用值传递,因此您无法更改参数(尽管如果参数是用户定义的对象,则可以更改参数指向的对象,但不能更改参数本身)。

不过,您可能会考虑的一件事是创建一个迭代器类型接口(interface):

// RangeIterator.javapublic class RangeIterator implements Iterator<Integer>{   public RangeIterator(int first, int last){       _first = first;       _last = last;       if ( _first <= _last ){           _step = 1;       }else{           _step = -1;       }   }   public RangeIterator(int first, int last, int step){       if ( step == 0 ){            throw new IllegalArgumentException("Step must be non-zero.");       }       _first = first;       _last = last;       _step = step;   }   public boolean hasNext(){       if ( _step < 0 ){           return _first > _last;       } else {           return _first < _last;       }   }   public Integer next(){       int result = _first;       _first += _step;       return result;   }   public void remove(){       throw new UnsupportedOperationException("Not implemented.");   }   private int _first;   private int _last;   private int _step;}// Range.javapublic class Range implements Iterable<Integer>{     public Range(int first, int last){       _first = first;       _last = last;       if ( _first <= _last ){           _step = 1;       }else{           _step = -1;       }     }     public Range(int first, int last, int step){       if ( step == 0 ){            throw new IllegalArgumentException("Step must be non-zero.");       }       _first = first;       _last = last;       _step = step;     }     public Iterator<Integer> iterator(){            return new RangeIterator(_first,_last,_step);      }     private int _first;     private int _last;     private int _step;}

使用上面的代码,您可以方便地编写如下内容:

Range range = new Range(x,100);for (int val : range){    println(val);}

由于我发现您有 Python 背景,所以感觉应该很像:

for val in xrange(x,100):    print val;

您可以实现IterableIterator接口(interface),以便提供您自己的可在 Java for-each 循环中使用的生成器。基本上,for (<i>Type</i> <i>identifier1</i> : <i>identifier2</i>)迭代 identifier2 的内容,它需要是 Iterable 类型,并在每次迭代时将当前元素分配给 identifier1。循环只是用于迭代 identifier2.iterator() 的语法糖。

关于java - 功能改变输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2712313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com