Я экспериментировал с игрой, которую я пытаюсь сделать. Я обнаружил, что у меня было два метода, которые были идентичны, за исключением цикла for, который был просто противоположным первому.Обратимые петли
Я попытался сделать это, чтобы использовать тот же код вперед или назад. Я закончил с:
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
A) B) Я хотел поделиться этой концепцией со всеми.
B) Мне интересно об эффективности такой петли. Я знаю, что при вычислении целевого номера и фактора incriction, но я не знаю, как его проверить.
C) Пока я нахожусь, я нашел одну строку, которая меняет две переменные без использования временного. Это займет некоторое время, чтобы прочитать, но лучше ли это (код мудрый), чем использование темпа? (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();
}
}
Результат 'finish = (start + finish) - (start = finish);' не определен, потому что разные компиляторы могут свободно оценивать два предложения в любом порядке. См. Аналогичный пример в нижней части этой страницы: http://www.cppreference.com/operator_precedence.html – AlcubierreDrive
@Jon: Java! = C++. Java не соответствует тем же правилам, и большинство вещей, которые не определены в C/C++, имеют очень точные определения в Java. –
@Mark Peters Ой, моя ошибка. Спасибо что подметил это. – AlcubierreDrive