Foro Oficial de Java

wfox

Lanero Reconocido
24 Sep 2005
2,017
Ahí la posición no tiene nada que ver, porque si fuera eso arrojaría un IndexOutOfBoundsException.

Yo no estoy diciendo que el array no tiene espacio. En el constructor lo crea de 100 elementos y si mi memoria no me falla el valor por defecto de todos los elementos del array va a ser null. Solo puede agregar AlgunosDVD por medio del método Agregar(AlgunosDVD d). Ahora, examinemos el caso de que agregue dos AlgunosDVD a Coleccion. Agrega el primero y queda:

coleccion[0] = AlgunosDVD d0;
indice = 1;

Se agrega el segundo y queda:

coleccion[1] = AlgunosDVD d1;
indice = 2;

Llame al método mostrar() y veamos como queda el bucle con indice = 2:

for (int i = 0; i <= 2; i++) {
....
}

Se va a ejecutar para coleccion[0], coleccion[1] y coleccion[2]. Pero coleccion[2] es igual a null. Llamar toString() en un null es una excepción de tipo NullPointerException, si no estoy mal.
 
  • Me gusta
Reacciones: sábado

sábado

Castrochavista.
25 Ago 2010
6,138
Yo no estoy diciendo que el array no tiene espacio. En el constructor lo crea de 100 elementos y si mi memoria no me falla el valor por defecto de todos los elementos del array va a ser null. Solo puede agregar AlgunosDVD por medio del método Agregar(AlgunosDVD d). Ahora, examinemos el caso de que agregue dos AlgunosDVD a Coleccion. Agrega el primero y queda:

coleccion[0] = AlgunosDVD d0;
indice = 1;

Se agrega el segundo y queda:

coleccion[1] = AlgunosDVD d1;
indice = 2;

Llame al método mostrar() y veamos como queda el bucle con indice = 2:

for (int i = 0; i <= 2; i++) {
....
}

Se va a ejecutar para coleccion[0], coleccion[1] y coleccion[2]. Pero coleccion[2] es igual a null. Llamar toString() en un null es una excepción de tipo NullPointerException, si no estoy mal.
Tienes razón.
 

DarkFulgoreII

Lanero Reconocido
31 Ago 2008
1,130
Ahí la posición no tiene nada que ver, porque si fuera eso arrojaría un IndexOutOfBoundsException.

Claro que si tiene que ver ! Estas recorriendo y tratando de mostrar n+1 posiciones de las cuales n son no nulas , obvio la última te va a sacar excepción. Solo corregir el límite del ciclo (poniendo menor en vez de menor igual) soluciona el lío



Enviado desde iOS 8 usando Tapatalk
 

Fozy

Lanero Reconocido
7 Abr 2005
1,423
Jóvenes no soy programador pero por una materia de la U debo ver una materia llamada programación de computadores y en el quiz que ya presenté me salió una pregunta sobre los que se vería en pantalla al usar el código que transcribiré.

La duda que tengo es que salió la misma pregunta dos veces o por lo menos para mi lo es, me podría alguien colaborar diciéndome que esta mal o bien e los códigos ? mil gracias


el punto uno:

De acuerdo al siguiente condicional:

int x = 1;
if (true) {
System.out.print(" Hola mundo ");
x+=3;
} else if ( x > 1 ) {
System.out.println(" cruel ");
}

El resultado que se muestra por consola es:
Seleccione una:
a. cruel
b. Hola mundo cruel Incorrecta
c. Hola mundo
cruel
d. Hola mundo
e. Ninguna
f. Error de sintáxis en la condicional del primer if


EL punto dos:

De acuerdo al siguiente condicional:

int x = 1;
if (true) {
System.out.print(" Hola mundo ");
x+=3;
} if ( x > 1 ) {
System.out.println("cruel");
}

El resultado que se muestra por consola es:
Seleccione una:
a. Hola mundo
cruel
b. Hola mundo cruel Correcta
c. Error de sintáxis en la condicional del primer if
d. Ninguna
e. Hola mundo
f. cruel
 

_Fabian_

Lanero Regular
15 May 2009
63
Hola! Son diferentes, en el primer punto, el segundo if está anidado dentro del else del primer if. En ese caso sólo se imprimirá "Hola mundo". En el segundo punto, hay dos if independientes, y como ambos dan verdadero, la salida en pantalla es "Hola mundo cruel". Nota que en el primer punto antes de "if ( x > 1 )" hay un "else" pero en el punto dos, ese "else" no está.

Saludos
 
  • Me gusta
Reacciones: Fozy

wrocha

Lanero Reconocido
11 Jul 2005
158
Jóvenes no soy programador pero por una materia de la U debo ver una materia llamada programación de computadores y en el quiz que ya presenté me salió una pregunta sobre los que se vería en pantalla al usar el código que transcribiré.

La duda que tengo es que salió la misma pregunta dos veces o por lo menos para mi lo es, me podría alguien colaborar diciéndome que esta mal o bien e los códigos ? mil gracias


el punto uno:

De acuerdo al siguiente condicional:

int x = 1;
if (true) {
System.out.print(" Hola mundo ");
x+=3;
} else if ( x > 1 ) {
System.out.println(" cruel ");
}

El resultado que se muestra por consola es:
Seleccione una:
a. cruel
b. Hola mundo cruel Incorrecta
c. Hola mundo
cruel
d. Hola mundo
e. Ninguna
f. Error de sintáxis en la condicional del primer if


EL punto dos:

De acuerdo al siguiente condicional:

int x = 1;
if (true) {
System.out.print(" Hola mundo ");
x+=3;
} if ( x > 1 ) {
System.out.println("cruel");
}

El resultado que se muestra por consola es:
Seleccione una:
a. Hola mundo
cruel
b. Hola mundo cruel Correcta
c. Error de sintáxis en la condicional del primer if
d. Ninguna
e. Hola mundo
f. cruel


no son la misma pregunta, la diferencia radica en el ELSE, ese else if hace que la ejecución sea diferente en ambos casos, en el segundo punto los dos if son independientes y por lo tanto la respuesta es b.

saludos.
 
  • Me gusta
Reacciones: Fozy

Fozy

Lanero Reconocido
7 Abr 2005
1,423
una pregunta mas , busqué una consola java online y ninguno de los dos me dio nad ambos me decian que era error, como puede ser eso?
 

DarkFulgoreII

Lanero Reconocido
31 Ago 2008
1,130
no son la misma pregunta, la diferencia radica en el ELSE, ese else if hace que la ejecución sea diferente en ambos casos, en el segundo punto los dos if son independientes y por lo tanto la respuesta es b.

saludos.


La cláusula else sirve para que los if se ejecuten de manera excluyente. Si el else está, la secuencia de condicionales ejecutará solamente uno de los casos (el primero que sea verdadero) y obviará los demás. En el segundo punto del quiz, no está el else, por lo que cada secuencia condicional es independiente, por lo que si las dos condiciones son verdaderas, se ejecutarán las instrucciones contenidas en los dos condicionales.

(se parece a un punto que puse en un parcial una vez :D )

Sent from my VPCSB45FL using Tapatalk
 
  • Me gusta
Reacciones: Fozy
M

-MetalK-

Guest
Gente necesito me recomienden un libro para aprender java, tengo conocimientos básicos de programacion en c++.
 

DarkFulgoreII

Lanero Reconocido
31 Ago 2008
1,130

yulian6766

Lanero Reconocido
5 Ago 2011
116
Amigos laneros estoy aprendidendo a manejar excepciones, cuando capturo una excepcion que haria como por ejemplo captudar el dato deseado?

public void agregarForma(){

Scanner in = new Scanner ( System.in );
float var1;
float var2;
String tipoFigura;
System.out.println("Digite el tipo de Figura");
tipoFigura=in.nextLine();
if("Circulo".equals(tipoFigura)){

try{
System.out.println("Digite el valor del radio");
var1=in.nextFloat();
}catch(InputMismatchException excepcion){
System.out.println("Error: el valor no es el indicado");
//Que mas iria aca? para captudar el dato sin que se reviente
}

figuras.add(new Circulo(atributos.devolverID(),tipoFigura,var1));
atributos.incrementarID()

gracias;
 

DarkFulgoreII

Lanero Reconocido
31 Ago 2008
1,130
Amigos laneros estoy aprendidendo a manejar excepciones, cuando capturo una excepcion que haria como por ejemplo captudar el dato deseado?

public void agregarForma(){

Scanner in = new Scanner ( System.in );
float var1;
float var2;
String tipoFigura;
System.out.println("Digite el tipo de Figura");
tipoFigura=in.nextLine();
if("Circulo".equals(tipoFigura)){

try{
System.out.println("Digite el valor del radio");
var1=in.nextFloat();
}catch(InputMismatchException excepcion){
System.out.println("Error: el valor no es el indicado");
//Que mas iria aca? para captudar el dato sin que se reviente
}

figuras.add(new Circulo(atributos.devolverID(),tipoFigura,var1));
atributos.incrementarID()

gracias;


Bueno, le metí mano a tu código para que valide en un método aparte....


import java.util.Scanner;


public class prueba
{
public static void agregarForma(){

Scanner in = new Scanner ( System.in );
float radio;
String tipoFigura;
System.out.println("Digite el tipo de Figura");
tipoFigura=in.nextLine();
if("Circulo".equals(tipoFigura)){

String radiostr; boolean valido =false;
do
{
System.out.println("Digite el valor del radio");
radiostr = in.nextLine();
valido=validarFloat(radiostr);
if(!valido) System.out.println("Valor invalido");
}
while(!valido) ;
radio= Float.parseFloat(radiostr);
}
System.out.println("Valido... ahora use el valor para lo que quiera");
//.add(new Circulo(atributos.devolverID(),tipoFigura,var1));
//atributos.incrementarID()

}
public static void main(String[] args)
{
agregarForma();
}
public static boolean validarFloat(String entrada)
{
try
{
Float.parseFloat(entrada);
}
catch (Exception e)
{
return false;
}
return true;
}

}


El método validarFloat retorna true si el string que recibe como parámetro es valido como un float (por ejemplo saca false si le mandas letras). Por otra parte, el programa debería preguntar varias veces el radio hasta que sea correcto el valor, razón por la cual le puse un ciclo ...

Espero te sirva

Sent from my VPCSB45FL using Tapatalk
 

yulian6766

Lanero Reconocido
5 Ago 2011
116
gracias por tu respuesta, pero al final para que sirve crear una excepcion que maneje en el caso que se ingrese mal el dato?, solo para generar error? o para volver a pedir el dato? gracias
 

latxor

Lanero Reconocido
Lanero VIP
18 Jul 2006
4,835
gracias por tu respuesta, pero al final para que sirve crear una excepcion que maneje en el caso que se ingrese mal el dato?, solo para generar error? o para volver a pedir el dato? gracias

Como programador son muy exactos los casos en que uno necesita crear una excepción, por lo general las excepciones se generan por X razon y es allí donde usted aprovecha y las manejas para que el programa no se cierre, muestre mensajes extraños para el usuario final, etc.

Por ejemplo hacer una división por cero, eso genera una excepción y es allí donde usted al usuario "No se puede hacer una división por cero, favor ingrese otro numero" o algo así.