Java - el pan de cada dia, no entiendo porque no funciona

 
Vista:

el pan de cada dia, no entiendo porque no funciona

Publicado por descode (2 intervenciones) el 09/09/2022 02:59:14
. Elabore un algoritmo que lea dos vectores. El primero, de M elementos, contendrá los códigos de los
estudiantes que perdieron Cálculo integral. El segundo, de N elementos, contiene los códigos de los
estudiantes que perdieron Lógica y algoritmos. Se debe crear e imprimir otro arreglo que contendrá los
códigos de los estudiantes que perdieron tanto Cálculo integral como Lógica y algoritmos.


package arreglos;

import javax.swing.JOptionPane;
public class ejercicio12 {
public static void main(String[] args) {
int a[],n, b[],m,c[],l=0;


do{
n=Integer.parseInt(JOptionPane.showInputDialog("digite el tamaño del vector a"));
m=Integer.parseInt(JOptionPane.showInputDialog("digite el tamaño del vector b"));

}while(n<0&&m<0);
a=new int[n]; b=new int[m];

for(int i=0;i<a.length;i++){
a[i]=Integer.parseInt(JOptionPane.showInputDialog("digite los codigos de los estudiantes que perdieron calculo de la posicion" + ""+i + ":"));

}

for(int j=0; j<b.length;j++){
b[j]=Integer.parseInt(JOptionPane.showInputDialog("digite los codigos de los estudiantes que perdieron logica de la posicion" + ""+j + ":"));
}

c=new int[n];
for(int i=0;i<a.length;i++){
for (int j=0; j<b.length;j++){
if(a[i]==b[i]){
l++;
c[l]=a[i] ;


}

}


}
if(l==0){
JOptionPane.showMessageDialog(null,"ningun estudiante perdio las dos materias");}
else{
JOptionPane.showMessageDialog(null,"los codigos de los estudiantes que perdieron las dos materias fueron ");
for(int i=0; i<l;i++)
JOptionPane.showMessageDialog(null, c[i]);}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

el pan de cada dia, no entiendo porque no funciona

Publicado por Kabuto (1381 intervenciones) el 09/09/2022 10:55:33
Una cosita a mejorar.
Al pedir las longitudes de los vectores, tampoco debemos admitir el valor 0, así que las condiciones del while deberían ser "mientras n y m sean menor o igual que 0"

1
2
3
4
5
do{
			n=Integer.parseInt(JOptionPane.showInputDialog("digite el tamaño del vector a"));
			m=Integer.parseInt(JOptionPane.showInputDialog("digite el tamaño del vector b"));
 
		}while(n<=0&&m<=0);


Luego, el principal error es que estás usando dos veces el índice i para comparar los elementos de los vectores.
1
2
3
4
5
6
7
8
9
c=new int[n];
		for(int i=0;i<a.length;i++){
			for (int j=0; j<b.length;j++){
				if(a[i]==b[i]){
					l++;
					c[l]=a[i] ;
				}
			}
		}

Para el arreglo b, has de usar el índice j :
1
2
3
4
5
6
7
8
9
c=new int[n];
		for(int i=0;i<a.length;i++){
			for (int j=0; j<b.length;j++){
				if(a[i]==b[j]){
					l++;
					c[l]=a[i] ;
				}
			}
		}

Con este pequeño cambio ya obtenemos mejores resultados, pero siguen siendo incorrectos.
Y es porque aún hay otro pequeño error, pero suficiente para que se fastidie todo.

Y es que estás incrementando la variable l ANTES de asignar el valor al arreglo c
1
2
3
4
5
6
7
8
9
c=new int[n];
		for(int i=0;i<a.length;i++){
			for (int j=0; j<b.length;j++){
				if(a[i]==b[j]){
					l++;
					c[l]=a[i] ;
				}
			}
		}

Esto provoca que la posición [ 0 ] del vector quede siempre vacía, pero luego se mostrará en pantalla como si fuera un resultado correcto.
Para evitarlo, hay que hacer el incremento DESPUÉS de hacer la asignación:
1
2
3
4
5
6
7
8
9
c=new int[n];
		for(int i=0;i<a.length;i++){
			for (int j=0; j<b.length;j++){
				if(a[i]==b[j]){
					c[l]=a[i] ;
					l++;
				}
			}
		}

Con esto parece que ya obtenemos los resultados deseados. Revísalo.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar