Ayuda con programa JAVA (juego de la vida) editado

Tengo un problemilla con este juego, el profesor me manda hacerlo pero en plan basico, sin entorno grafico ni nada, solo el algoritmo. De momento solo puedo usar cosas tipo if, while, for, dowhile y demas cosas simples aparte de iniciar tablas y cosas basicas. Lo he planteado creando tablas cuadradas recorriendolas e intentando depurar los requerimientos del problema, pero no me sale jejeje... Alguien me puede ayudar un poco?? algun ejemplo que hallais hecho o algo me salvaria la vida ya que tengo que entregarlo y despues d 3 dias dandole al bluej no he conseguido demasiado jeje.
Bueno gracias anticipadas y aqui os dejo el enunciado:

A lo largo del tiempo, una célula puede estar en uno de dos posibles estados: Viva o Muerta. La población de celdas va cambiando en el tiempo según ciertas reglas bien definidas.
Estas reglas determinan el estado que tendrán las células en la siguiente generación. Las reglas son:
 Supervivencia: Si una célula está rodeada por dos o tres células vivas en la generación actual, permanecerá viva en la siguiente generación.
 Nacimiento: Si una célula muerta está rodeada por exactamente tres células vivas en la generación actual, nacerá (estará viva) en la siguiente generación.
 Muerte por soledad: Si una célula no tiene ningún vecino vivo, o si tiene sólo uno en la generación actual, morirá de soledad por lo que estará muerta en la siguiente generación.
 Muerte por sobrepoblación: Si una célula tiene cuatro o más vecinos vivos en la
generación actual, morirá a causa de la sobrepoblación por lo que estará muerta en la siguiente generación.
Para conocer el estado de la población en la siguiente generación, deben aplicarse estas reglas en forma simultánea a todas las células del espacio, mirando únicamente el estado actual,
es decir, mirando el estado de las células en la generación actual.
Un autómata celular es un sistema que modela el comportamiento de un espacio celular aplicando reglas como las anteriores, generación por generación. Las reglas dadas anteriormente
pueden resumirse de la siguiente manera:
 Toda celda viva con dos o tres vecinos vivos, sobrevive.
 Toda celda muere si, estando viva, tiene en la generación actual cuatro o más vecinos vivos, o uno o menos vecinos vivos.
 Una celda muerta nace cuando tiene exactamente tres vecinos vivos.
La forma más apropiada para representar el espacio celular en un programa, es mediante un arreglo de dos dimensiones, o matriz. Para poder determinar el estado de la siguiente generación,
se requiere una segunda matriz, pues no se puede perder el estado actual mientras se está
calculando el siguiente. Para trabajar con varias generaciones pueden utilizarse las mismas dos matrices. Tamaño maximo 100.
Hacértelo no te lo vamos a hacer, si quieres exponer alguna duda concreta te ayudaremos con gusto.
sisi no espero que nadie lo haga para mi jeje solo pido algun ejemplo asi mas basico donde me pueda guiar porque todos los que encuentro en internet son con uso de metodos y yo aun estoy empezando...
de momento llevo creadas las tablas y la parte en la que el usuario indica las posiciones, lo que no se es plantear las restricciones de forma correcta para que siga avanzando generaciones correctamente...
Sólo tienes que recorrer la tabla actual, contabilizar los vecinos de cada posición (teniendo en cuenta los bordes de la tabla) y poner el siguiente estado según las reglas en la otra tabla. Cuando termines con la tabla, las intercambias.
Co lo de tener en cuenta los bordes t refieres al tamaño maximo de la tabla no? Gracias d verdad por la molestia :-)
Me refiero a la posición de la celda en la tabla, a los bordes. Por ejemplo, si cada celda es t[x][y], siendo x e y las posiciones en la tabla, los vecinos son (omitiendo la tabla, sólo índices):

x-1,y-1     x,y-1      x+1,y-1
x-1,y                  x+1,y
x-1,y+1     x,y+1      x+1,y+1


Entonces recorres la tabla y, para cada celda (x,y), compruebas los vecinos anteriores para contabilizar los vecinos vivos y aplicar las reglas dependiendo de si la celda actual está viva o no. Pero no siempre puedes buscar esos 8 vecinos, la primera fila no tiene vecinos por encima, la primera columna no tiene vecinos a la izda, habrá 4 celdas que sólo tengan 3 vecinos (las esquinas), etc. Eso lo tienes que tener en cuenta a la hora de contabilizar los vecinos.
Tengo un problema al almacenar los datos en la tabla:

do
        {
            do
            {
                System.out.println("Introduzca la posicion i: ");
                i=tec.nextInt();
            }while(i<-1 || i>TAM);
            do
                {
                    System.out.println("Introduzca la posicion j: ");
                    j=tec.nextInt();
                }while(j<-1 || j>TAM);
            tabla[i][j]=1;
        }while (i!=-1 || j!=-1);


El requisito es que cuando el usuario introduzca -1 se le deje de pedir las posiciones. Lo que he hecho ha sido introducir un 1 en las casillas vivas... pero nose porque no me deja...
-Pides introducir valor
-Si valor != -1: bucle
-Si no:
   Del primer valor al último los recorres con un for anidado dentro de otro for, de forma que recorras la matriz bidimensional haciendo las comprobaciones y las asignaciones descritas en el enunciado.
mejor si usas bucles while, personalmente me parecen bucles mas limpios y faciles de entender que los do/while

#OFFTOPIC
@javilawi69, espero que franco no levante la cabeza, pero como la levante la RAE y vea tu firma no creo que dures mucho...
el problema lo tengo con que como podeis ver en el codigo, pido al usuario que introduzca la i y luego digo que i=tec.nextin() e igual con la j, pero cuando pongo que tabla[i][j]=1 es cuando falla....
debes pedir valores, y luego asignarles una correspondencia i-j de forma interna.
No se si me explico. cada valor debe compartir ambas, sino no es una matriz bidimensional...
si, entenderlo creo que lo entiendo... puedes ponerme un ejemplo donde le pidas al usuario la posicion??? porque nose como pedirle los dos valores (i,j) y luego meterlos... no se si es mucho pedir pero esq no m sale
Yo del enunciado no entiendo que debas pasarle la posición, sino la totalidad de la cadena.

Puedes meterlo en una matriz normal y recorrerlo como array 2D simplemente (de este modo ya están ordenadas).
Si lo quieres meter en un array 2D de dimensiones preseteadas de antemano, puedes usar una variable temporal y un par de control, y comproar si estás en el límite de la fila/columna.

Es decir, pongamos que es una matriz cuadrada de 4x4, 8x8 o lo que tú quieras, que empieza en 0,0.
if pos_columna es menor a limite_columna{
array2d[pos_fila][pos_columna];
pos_columna++;
}
if pos_columna es igual a limite_columna{
array2d[pos_fila][pos_columna];
pos_columna = 0;
pos_fila++;
}
if pos_fila es igual a limite_fila{
update de estado a la matriz con un for mismamente, y muestras resultados
}

Es solo una forma de hacerlo, creo que es con la que quizás te aclares más para seguir. No más pistas, a currar!
12 respuestas