Я экспериментировал с игрой, которую пытаюсь сделать.Я обнаружил, что у меня есть два метода, которые были идентичны, за исключением цикла for, который был просто обратным предыдущему.
Я попытался сделать так, чтобы я мог использовать один и тот же код вперед или назад.Я закончил с:
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
A) B) Я хотел бы поделиться этой концепцией со всеми.
B) Мне любопытно, насколько эффективен такой цикл.Я знаю, что это вычисляет целевое число и коэффициент инкримента при обращении, но я не знаю, как это проверить.
C) Пока я в нем, я нашел одну строку, которая меняет местами две переменные безиспользуя временный.Чтобы прочитать, требуется время, но лучше ли это (с точки зрения кода), чем использовать temp?(3-я строка в основном ниже)
Я проверил его на функционирование, и он работает, как и ожидалось.Если второе число больше первого, оно считается.Если нет, то обратный отсчет.Мой тестовый код был:
// A generic loop that can go up or down
import java.io.*;
public class reversable
{
public static int start = 1;
public static int finish = 10;
public static void main(String[] args)
{
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
{
System.out.println("i = " + i);
}
finish = (start + finish) - (start = finish);
System.out.println("Finish = " + finish);
System.out.println("Start = " + start);
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
{
System.out.println("i = " + i);
}
finish = 10;
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
{
System.out.println("i = " + i);
}
}
}
Исходя из комментариев, это будет приемлемо:
public static void reversable (int i, int j)
{
if (i > j) int inc = -1; // Count down
else int inc = 1; // Count up
j += inc;
for (i; i != j; i += inc)
{
dostuff();
morestuff();
mostuff();
}
}