chorrada C#

Vikkktor

Buenas, llevo una hora estancado pensando esta chorrada pero no me sale :f5:

El caso es que quiero pedir una serie de cadenas, y para terminar hay que introducir "fin", pero si se introduce "fin" como primera cadena, el proceso no se realizará.

Pues bien, me funciona todo menos si meto solamente una cadena antes del fin.

Ej:
perro
fin

me da como error "indice fuera de los limites de la matriz".

String [] cadena = new String [1];                     
int i = 0; try { Console.WriteLine("Introduzca cadenas de caracteres, escriba fin para terminar"); Console.Write("Cadena {0}: ", i+1); cadena[i] = Convert.ToString(Console.ReadLine()); while (cadena[i] != "fin") { Array.Resize(ref cadena, cadena.Length + 1); i = i + 1; Console.Write("Cadena {0}: ", i+1); cadena[i] = Convert.ToString(Console.ReadLine());
} if (cadena[0]!="fin") { Array.Resize(ref cadena, cadena.Length - 1); OrdenaCaracteres(cadena); } else Console.WriteLine("Introduzca al menos una cadena antes de terminar"); } catch (Exception error) { Console.Write(error.Message); }

Gracias!

elkaoD

String [] cadena = new String [1];

Ahí no caben dos cadenas.

1 respuesta
Wasd
if(cadena[0].Equals("fin")){}
if(!cadena[0].Equals("fin")){}

Puede ser? Yo manejo Java, pero C# es muy parecido.

Vikkktor

#2 creo un array de tamaño 1, pero cuando entra en el while, voy aumentando en 1 el tamaño del array por cada cadena que introduzco.

2 respuestas
elkaoD

#4 Array.Resize(ref cadena, cadena.Length - 1);

Cuando tienes 1 elemento cadena.Length == 1 y por tanto cadena.Length - 1 == 0. Estás haciendo más pequeño el array.

Pero es que eso ni siqueira se ejecuta, porque cuando llega ahí ya se ha acabado el while (y por tanto ya te ha dado el error).

Lo de redimensionar arrays al vuelo huele a mal código. Usa un ArrayList.

Lan0s

#4 ten mucho cuidado con salirte del array. Yo dejaría el tamaño del array fijo y buscaría otra forma de hacer lo que estás haciendo.

Soltrac

He debugueado tu código sin el "OrdenaCaracteres" y funciona perfectamente, así que me da que tu fallo anda por ahí.

Usuarios habituales

  • Soltrac
  • Lan0s
  • elkaoD
  • Vikkktor
  • Wasd