Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 函数变换输入_Java_Recursion_Function - Fatal编程技术网

Java 函数变换输入

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参数。如果希望保持

我想从一个号码转到另一个号码。例如,如果我从6开始,我的目标是10,我想要一个函数,在每次传递时,它会使我从6变为10,或者如果我有数字14,我的目标是9,它会从14倒计时到9。到目前为止,我已经做到了(这是在处理Java Api时编写的,但与常规Java基本上没有区别,draw只是一个连续循环)

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;