Java 函数变换输入
我想从一个号码转到另一个号码。例如,如果我从6开始,我的目标是10,我想要一个函数,在每次传递时,它会使我从6变为10,或者如果我有数字14,我的目标是9,它会从14倒计时到9。到目前为止,我已经做到了(这是在处理Java Api时编写的,但与常规Java基本上没有区别,draw只是一个连续循环)Java 函数变换输入,java,recursion,function,Java,Recursion,Function,我想从一个号码转到另一个号码。例如,如果我从6开始,我的目标是10,我想要一个函数,在每次传递时,它会使我从6变为10,或者如果我有数字14,我的目标是9,它会从14倒计时到9。到目前为止,我已经做到了(这是在处理Java Api时编写的,但与常规Java基本上没有区别,draw只是一个连续循环) intx=100; 作废提款(){ x=朝向(x,10); println(x); } 指向整数(当前整数,目标整数){ 如果(当前!=目标){ 如果(当前Java总是按值传递int参数。如果希望保持
intx=100;
作废提款(){
x=朝向(x,10);
println(x);
}
指向整数(当前整数,目标整数){
如果(当前!=目标){
如果(当前Java总是按值传递int
参数。如果希望保持状态(特别是可写状态),则将其保留在对象中,并(可能)使朝向()成为该类的方法。Java使用按值传递,因此无法更改参数(尽管如果参数是用户定义的对象,您可以更改参数指向的对象,但不能更改参数本身)
你可以考虑的一件事是创建一个迭代器类型的接口:
// RangeIterator.java
public 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.java
public 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;
}
//RangeIterator.java
公共类RangeIterator实现了迭代器
{
公共范围迭代器(int-first,int-last){
_第一=第一;
_最后一个=最后一个;
如果(_first _last;
}否则{
返回第一个<\u最后一个;
}
}
公共整数next(){
int result=_first;
_第一+=\u步;
返回结果;
}
公共空间删除(){
抛出新的UnsupportedOperationException(“未实现”);
}
私人INTU优先;
私人国际最后;
私人内部步骤;
}
//Range.java
公共类范围实现了Iterable
{
公共范围(第一个整数,最后一个整数){
_第一=第一;
_最后一个=最后一个;
如果(_首先,这肯定行得通……Java是否有类似于Python生成器的功能?我是否应该更经常地使用对象作为解决方案?我不愿意每次需要时都为此创建对象。Java是一种OO语言,具有非常高效的内存分配系统,因此不妨使用它。:-)我见过类似Python生成器的东西,但如果您想使用生成器返回一系列值,则只制作一个迭代器可能更简单。@Doodle,对于生成器,请参阅我的解决方案;我创建了一个可以使用的范围迭代器。
// RangeIterator.java
public 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.java
public 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);
}
for val in xrange(x,100):
print val;