2013-06-08 2 views
0

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

Я подошел к нему несколькими способами, но я оттачивал это как лучшее.

Часть первая - найдите случайные x и y, которые являются стороной, а не диагональю. Я решил, что быть абс абс (x) и abs (y) не может быть одинаковым. Я перебираю случайные попытки до тех пор, пока abs() s не будут разными.

Часть вторая - используйте четыре, если(), чтобы определить текущую сторону, а затем измените x, y на следующую сторону (по часовой стрелке).

Мои результаты состоят в том, что цикл останавливается в нечетных местах и ​​никогда не отличается абс(). Я подозреваю, что выражение while() неверно. Я пробовал abs (x) .equals (abs (y)), но обнаружил, что метод не работает на примитивах. Поэтому я попробовал abs (x)! = Abs (y), но это приводит к нечетным результатам.

Вот текущие усилия. Любая помощь будет оценена по достоинству.

public static void main(String[] args) { 
     //jkbeg 
     System.out.println("objective in this section is" + 
      " to get a random side and then move clockwise around to others"); 
     int targetx; //these will hold the next cell to use. 
     int targety; 

//  Part One - get random side to be starting cell 
//  n.b. abs(x) == abs(y) means diagnol cell, not a side 
//  first get randoms of 0 or 1 into targets. 
//  keep trying randoms until abs() are not equal  
    do { 
     targetx = (int) (Math.round(Math.random())); 
     targety = (int) (Math.round(Math.random())); 
     System.out.println("rando, not checked yet"+targetx +","+targety); 
     System.out.println("abs x "+Math.abs(targetx)); 
     System.out.println("abs y "+Math.abs(targetx)); 
    }while(Math.abs(targetx) == (Math.abs(targety)) ); 
    System.out.println("after check for sides, not corners"+targetx +","+targety); 

//Part two - walk around the sides clockwise 
     System.out.println("random start cell: "+targetx +","+targety); 
    for(int targetCounter=0; targetCounter<4; targetCounter++){   
     if ((targetx==1)&&(targety==0)){targetx=0;targety=1;} //top to right 
     if ((targetx==0)&&(targety==1)){targetx=-1;targety=0;} //right to bottom 
     if ((targetx==-1)&&(targety==0)){targetx=0;targety=-1;} //bottom to left 
     if ((targetx==0)&&(targety==-1)){targetx=1;targety=0;} //left to top 
     System.out.println("next cell clockwise: "+targetx +","+targety); 
    } 
    System.out.println("end *random side then walk around* here here"); 
    System.exit(0); 
    } // main 
     //jkend 
+0

Вы знаете, что Math.random() возвращает double между 0 и 1? Возможно, попробуйте java.util.Random.nextInt()? – keuleJ

ответ

1

Мои результаты были, что цикл останавливается на нечетных местах, и никогда с абс() с различными. Я подозреваю, что выражение в то время как() неправильно

System.out.println("abs x "+Math.abs(targetx)); 
System.out.println("abs y "+Math.abs(targetx)); 

Заканчивать имена переменных в этих строках.

Часть II: Каждое из ваших операторов if изменяет значение targetx и таргетинг таким образом, чтобы значения соответствовали следующему оператору if. В результате выполняется каждый оператор if, а значения targetx и targety в конце цикла - значения, установленные в последнем операторе if.

Вы должны использовать структуру if-else if. Даже если значения, заданные в каждом из операторов if, не соответствуют следующему оператору if, вы все равно хотите использовать структуру if-else if, потому что тогда java не будет проверять все условия 4 if каждый раз через цикл , С и if-else, если структура, как только одна, если совпадает, остальные пропускаются.

+0

Это похоже на хороший анализ. –

+0

извините, странное подчинение. –

+1

В заключение я сделал тупую ошибку. Я все время говорю себе, чтобы не копировать-вставлять, не внося изменения. Может, мне нужно сказать себе громче. Спасибо за то, что вы ответили на урок. Это было очень хорошо. –

Смежные вопросы