Изменение функции вводится

Я хотел бы пойти от одного числа до другого. Например, если бы я запустил в 6, и моя цель равнялась 10, я хочу функцию, которая на каждой передаче принесла бы мне от 6 к 10 или если бы у меня было номер 14, и моя цель равнялась 9, то это рассчитало бы по сравнению с 14 к 9. До сих пор я имею (это записано в Обработке API Java, но нет по существу никакого различия от регулярного 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;
}

это дает мне результаты, которые я хотел бы, но я хотел бы иметь все в стороне к () функция. Когда я заменяю X переменной, она, конечно, сбрасывает его сам к статической переменной.

Подвести итог его, как я могу передать переменную функции и иметь ту переменную, это было передано изменение на каждой последующей передаче. Я изучил рекурсию как решение, но тот из просто приносит мне к конечному решению. Я могу передать количество массиву, но не хотел бы делать это также.

1
задан Justin Johnson 26 April 2010 в 10:06
поделиться

2 ответа

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;
}

С помощью приведенного выше кода вы могли бы удобно написать что-то вроде:

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

Поскольку я вижу, что вы пришли из фона Python, это должно выглядеть примерно так:

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

Вы можете реализовать интерфейсы Iterable и Iterator , чтобы предоставить свои собственные генераторы, которые можно использовать в циклах для каждого цикла Java. Обычно для ( Тип идентификатор1 : идентификатор2 ) выполняет итерацию по содержимому идентификатор2 , который должен быть Iterable типом, и на каждой итерации присваивает текущий элемент идентификатору1 . Цикл - это просто синтаксический сахар для перебора идентификатора2 .iterator ().

2
ответ дан 3 September 2019 в 01:01
поделиться

Java всегда передает int аргументов по значению. Если вы хотите сохранить состояние (особенно доступное для записи), сохраните его в объекте и (возможно) сделайте to () методом этого класса.

0
ответ дан 3 September 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: