public static void moveFish(Fish fish, Shark shark) {
		
		int nx, ny;
		int newDir;
		
		for(int dir=0; dir<8; dir++) {
			newDir = (fish.dir + dir)%8;
			nx = fish.x + dx[newDir];
			ny = fish.y + dy[newDir];
			
			//이동하지 못할 조건
			if(nx>3 || nx<0 || ny>3 || ny<0) {
				continue;

			}else if(shark.x == nx && shark.y ==ny){
				continue;
				
			}else {
				//이동할수 있는 조건
				int tempX, tempY, tempDir;
				Fish targetfish = findByCoord(nx, ny);
				//교환 -> 내가 실수한 부분 -> 새로운 방향으로 집어 넣어야 하는데 
				tempX = fish.x; tempY = fish.y; tempDir = fish.dir; // 이 부분
				fish.x = targetfish.x; fish.y = targetfish.y;
				targetfish.x = tempX; targetfish.y = tempY; targetfish.dir = tempDir;
	
				return;
			}

		}

	}

위는 물고기 이동 코드인데 (fish.dir + dir)%8 로 새로운 방향이 설정되었으면 (반시계 방향으로) 돌면서 이동 가능한 방향을 새로 잡은건데 내가 실수한 부분은 기존에 이동 하지 못하는 방향을 그대로 유지 시켜버렸다.

위의 이 부분이라고 적혀 있는 곳에서

tempX = fish.x; tempY = fish.y; tempDir = newDir;

기존의 방향을 새로운 방향으로 update해줘야 한다.

첫 번째 이동에는 큰 문제가 안생길수 있다 기존의 물고기 방향은 상관없이 우선 원하는 방향으로 바꾸긴하니까 하지만 두 번째 사이클 이동부터는 달라진다.

그리고 하나 더 direction을 바꿀 필요가 없었다. 좌표만 바꾸면 되는거였는데 내가 위에서 direction까지 바꿔서 계속 틀린거였다.