Foros del Web » Programación para mayores de 30 ;) » Java »

Contador que inicie en null, ¿es posible?

Estas en el tema de Contador que inicie en null, ¿es posible? en el foro de Java en Foros del Web. Buen día amigos, Estoy empezando con java y tengo un problemita en un codigo, es tengo un for con un contador que quiero que inicie ...
  #1 (permalink)  
Antiguo 29/08/2015, 11:57
 
Fecha de Ingreso: agosto-2015
Mensajes: 2
Antigüedad: 9 años, 2 meses
Puntos: 0
Contador que inicie en null, ¿es posible?

Buen día amigos,

Estoy empezando con java y tengo un problemita en un codigo, es tengo un for con un contador que quiero que inicie a partir de valores null...
Veran quiero ingresar datos a un arreglo desde el teclado, pero el arreglo ya tiene datos ingresados.
Le agrego un dato mas y todo bien, pero cuando vuelve al menu " un switch" y quiero ingresar otro dato, el contador vuelve a tomar el mismo valor y lo reemplaza, por eso quiero que el contador empiece desde null.

Les muestro el codigo y muchas gracias de antemano:


import java.util.*;
public class IngresoDeDatosArrayteclado
{
public static void main(String[] args)
{

Scanner leer = new Scanner(System.in);

String vecnombre [] = new String [300]; //creando vector
vecnombre[0]= "nombre1"; //primer dato

for (int r = 0 ; r<1000 ; r++)//for que retorna 1000 veces. //para que regrese
{

System.out.print("\n Bienvenido al sistema! \n "
+ "1.Ingresar nuevo usuario. \n "
+ "2.Listar Usuarios existentes.\n "
+ "Por Favor elija una opcion: " ) ;
String opcionelegida = leer.nextLine();

switch (opcionelegida) //Menu
{

case "1":

for(int c = 1 ; c<vecnombre.length; c++) //for que me da el problema
{
System.out.print("Ingrese nuevo nombre de posicion " + c + ": ");
vecnombre[c] = leer.nextLine();
break;
}

break;

case "2" :
for(String var3 : vecnombre) //imprime lista de arreglo

if (vecnombre == null)
{
break;
}

else
{
System.out.println( var3 );
break;
}
break;

default:
System.out.print("Opcion no valida, reintente...");
break;
}
}

}

}
  #2 (permalink)  
Antiguo 29/08/2015, 12:33
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: Contador que inicie en null, ¿es posible?

Has metido el break del case dentro del for. De forma que el for solo itera una única y exclusiva vez pues el break rompe el for. Después, al no haber más break pasa al siguiente case, y lo hace entero. como ese siguiente case si tiene un break... termina ahí el switch.

- Si quieres que meta las 300 posiciones en ese for... pon el break fuera del for.
- Si solo quieres que meta el valor de una única posición de tu array entonces no utilices un for.
- Si quieres que meta un número indefinido, y que sea el usuario el que decida si meter más valores en más posiciones o terminar de meter valores... utiliza un while, o un do while.

Última edición por Kritik; 29/08/2015 a las 12:44
  #3 (permalink)  
Antiguo 29/08/2015, 12:44
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Contador que inicie en null, ¿es posible?

Buenas,

Código Java:
Ver original
  1. for(int c = 1 ; c<vecnombre.length; c++) //for que me da el problema
  2. {
  3. System.out.print("Ingrese nuevo nombre de posicion " + c + ": ");
  4. vecnombre[c] = leer.nextLine();
  5. break;
  6. }

Tu for no tiene sentido intentas hacer un bucle para recorrer el resto de elementos pero en cuanto recorres el primero siempre haces un break y sales.

El codigo deberia ser simplemente:

Código Java:
Ver original
  1. System.out.print("Ingrese nuevo nombre de posicion " + c + ": ");
  2. vecnombre[c] = leer.nextLine();

Por otro lado, para que el contador "conserve" el valor y no se "reinicie" tienes que declararlo como variable dentro del ambito que engloba la ejecucion. En este caso, basta con declararla al inicio del main.

String vecnombre [] = new String [300]; //creando vector
vecnombre[0]= "nombre1"; //primer dato
int c = 1;


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #4 (permalink)  
Antiguo 29/08/2015, 12:56
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: Contador que inicie en null, ¿es posible?

Después de reeler tu texto cambio mi respuesta:

Entiendo lo que pretendes hacer. Como tienes ya desde el principio un valor en la posición 0 de tu array, y al principio tienes un null en la posición 1... quieres que cuando el usuario empiece a meter valores en tu array los meta a partir de esa posición en la que tienes un null.

Pues bien, no puedes asignar un null a una variable int, porque solo con declarar una variable int, antes de asignarle ningún valor ya tiene el valor 0 por defecto. Así pues no puedes luego comparar un valor null con otro valor. Porque los valores null no se pueden comparar con ningún otro valor.

(null == 1) No se puede verificar si esto es true o false.
(null == null) No se puede verificar si esto es true o false.

Sin embargo, eso pasa con los datos primitivos. Los Arrays, por ejemplo, si pueden almacenar valores null. No se qué tipos de objetos pueden o no, pero lo que si se es que todos los datos primitivos tienen un valor por defecto distinto a null, y si no se les es asignado... cogen ese que es el de por defecto.

Pero en tu caso, al trabajar con un array lo que puedes hacer es averiguar si una posición de tu array es un null o algo distinto a un null. Por lo tanto, lo que puedes hacer es recorrer tu vector hasta encontrar un valor null. Y al encontrar esa posición, rellenarla.

for (int c=0;c<miArray.lenght;c++){
Si (miArray[c]==null){
mete un dato.
rompe el for.
}
}

Aun con todo... los menús no suelen hacerse con un bucle for, porque si el usuario no quiere elegir ninguna opción... no quiere leer datos ni meter datos... tiene que tragarse 1000 veces el menú.
Lo que suele hacerse es utilizar un while, o un do while. (mientras se cumpla condición ejecutar órdenes) o (ejecutar órdenes mientras se cumpla condición) metiendo una opción de salir dentro del menú... y en el caso de seleccionarla que se cumpla la condición de salida.
Lo que pasa es que si dices que estás aprendiendo quizá aún no hayas estudiado estos bucles, así que de momento, para lo que es aprendizaje del for... pues te tienes que jorobar y mostrar 1000 veces el menú. Jejejje (ya podrías reducirlo a 10)

Última edición por Kritik; 29/08/2015 a las 13:28
  #5 (permalink)  
Antiguo 30/08/2015, 23:57
 
Fecha de Ingreso: agosto-2015
Mensajes: 2
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Contador que inicie en null, ¿es posible?

Amigos muchas gracias a todos, con sus comentarios y explicaciones entendi mejor y ya esta lo que queria, estoy muy agradecido. Kritik, Profesor_Falken...

Les dejo el codigo para que lo vean, y voy a seguir practicando agregarle mas opciones y otras cosas tambien, de nueo muchras gracias. Saludos.

Cita:
import java.util.*;

public class IngresoDeDatosArrayteclado
{
public static void main(String[] args)
{

Scanner leer = new Scanner(System.in);

String menu;

String vecnombre [] = new String [5]; //creando vector

vecnombre[0]= "nombre1 de prueba en posicion 0 del arreglo o matriz";
vecnombre[1]= "nombre2 de prueba en posicion 1 del arreglo o matriz";
vecnombre[2]= "nombre3 de prueba en posicion 2 del arreglo o matriz... INICIE ...";

do
{

System.out.print("\n Bienvenido al sistema! \n "
+ "1.Ingresar nuevo usuario. \n "
+ "2.Listar Usuarios existentes.\n "
+ "Por Favor elija una opcion: " ) ;
menu = leer.nextLine();


switch (menu)
{

case "1":
for(int c = 0 ; c<vecnombre.length; c++)

if (vecnombre[c]==null)
{
System.out.print("Ingrese nuevo nombre de posicion " + c + ": ");
vecnombre[c] = leer.nextLine();
break;
}
break;


case "2":
for(int c2 = 0 ; c2<vecnombre.length; c2++)
if (vecnombre [c2] == null)
{
break;
}
else
{
System.out.println( vecnombre [c2] );
}
break;

default:
System.out.print("Opcion no valida, reintente...");
break;
}
}

while(menu != null);

}

}
  #6 (permalink)  
Antiguo 01/09/2015, 07:18
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: Contador que inicie en null, ¿es posible?

Yo lo veo bien, no lo he probado pero lo veo correcto a simple vista. Solo 2 observaciones:

1.- En un bucle for utilizas la variable c, y en el siguiente c2. Indicarte que las variables utilizadas en un for son locales únicamente dentro del bucle for. Cuando acaba el for la variable desapace.

Puedes, por ejemplo, hacer 2 for seguidos utilizando en cada uno el mismo nombre para la variable, pues en cada una de ellas se declara como variable nueva, con un valor de inicio nuevo. No hace falta poner nombres de variables distintas (si no quieres)

Estas variables difieren de las otras variables locales que si son visibles dentro de todo el método en el que han sido declaradas, pero no fuera de ese método. Pues las variables del for son "más locales" que las locales, pues como digo, cuando acaba el for la variable desaparece.

(Ahora que lo pienso... nunca me ha dado por usar el mismo nombre para la variable del for que una variable local que haya en el mismo método. ¿Qué pasaría? Ni idea jaja)


2.- Se pulse lo que se pulse en el menú, realiza la acción correspondiente al case (si es que está) y repite el menú... y lo repetirá hasta el fin de los días.
La acción para cerrar la ejecución del programa desde el mismo programa es "System.exit(0);". Pruébala para la opción 3 "Salir del programa" del menú. Verás como te mola.

Etiquetas: arreglo, contador, contadores, for(), null
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:39.