A ver que os parece lo que hemos realizado de practica para la universidad.
MVC a pelo, sin frameworks
A ver que os parece lo que hemos realizado de practica para la universidad.
MVC a pelo, sin frameworks
Hola!
Tengo que insertar una imagen a cada objeto que cree, de manera que cuando quiera consultar el objeto se me abra una ventana mostrando los datos del objeto+imagen, y mi duda surge porque nose que atributo tengo que ponerle en la clase para luego poder agregar la imagen al crear dicho objeto.
Lo que habia pensado era ponerle un ImageIcon y poner todas las fotos necesarias en mi proyecto principal, pero nose si va ser la mejor idea para manejarlo despues!
Al iniciar la aplicacion, tiene que salir 2 botones, uno para registrarse y otro para logear, hay 2 tipos de usuarios, administrador y cliente.
El cliente imagino que va ser un objeto de clase Persona/Cliente y los voy almacenando en un ArrayList o hashmap, mi pregunta es como hago para crear un administrador que sepa que tiene unos derechos diferentes a los de usuario, todo a bse de sentencias de control?
Por si te sirve http://www.driverlandia.com/java-anadir-imagen-de-fondo-a-jpanel/
es para un JPanel pero es mas o menos lo mismo. Yo lo que hice en la aplicacion que ves encima es darle al boton ya su atributo imagen y
private Image img_objeto;
public void setImage(String imgPath) {
this.img_objeto = new ImageIcon(imgPath).getImage();
}
#152 Lo de los clientes/administradores: si sólo tienes dos tipos de user, yo de ti creaba un boolean isAdmin, o algo así, y le daba valor true si el login corresponde con el de un admin y false si es un cliente. Luego, cuando crees el JFrame principal, pasas por parámetro el boolean al constructor de la ventana. Si es false, pintará unas opciones. Si es true, pintará otras. Incluso puedes poner un atributo isAdmin en el JFrame y darle valor para consultarlo cada vez que el usuario quiera hacer algo, a ver si puede o no.
Se puede hacer con objetos, pero es un coñazo innecesario: haz un objeto de la clase Usuario y dos subclases, Cliente y Administrador, y en vez de pasar el boolean pasas la referencia al objeto que se crea al loguear dependiendo de las credenciales introducidas.
Refloto esto para no crear un post nuevo.
Estoy haciendo un metodo set en la clase Modulo, y necesito saber el expediente de un alumno que esta en la clase Alumno para meterlo en un hashmap junto con otro dato.
Esto es lo que tengo, pero me da error. Que igual estoy haciendo una burrada, pero hemos empezado con las clases ahora.
(Codigo es el codigo del modulo)
public void Matricular(Alumno a, String codigo){
matriculados.put(a.getExpediente(), codigo);
}
Me da error concretamente en a.getExpediente(). Diciendome que no puede convertir int a Alumno, o algo asi.
#155 si no das más detalles lo único que puedo decirte es lo mismo: estás tratando de usar un tipo de dato entero donde deberías usar un tipo 'Alumno'.
Basicamente quiero extraer el expediente del alumno, para meterlo ahi, y que el expediente sea la clave del hashmap que he creado.
Habria que ver como esta definido expediente y el hashmap, y podrias ser mas especifica con el error xd
Esque el error dice eso simplemente, int cannot be converted to Alumno.
#159 Wtf, es un ejercicio de clase sin mas, no tengo miedo a que lo robeis.
public int getExpediente(){
return expediente;
}
Map<Alumno, String> matriculados = new HashMap<>();
public void Matricular(Alumno a, String codigo){
matriculados.put(a.getExpediente(), codigo);
}
#160 en el HashMap<> que tienes entre <>?
no tendrás HashMap<Alumno,String> ?
edit: ok, tienes que cambiar el Alumno de HashMap<Alumno,String> por HashMap<int,String>
Si, lo tengo como Alumno, String.
Pero esque pienso que Alumno como "clave" en el hashmap no es una buena clave, ya que guarda otros atributos ademas del expediente, quizas deberia poner solo el expediente?
Necesitas hacer coincidir los tipos de datos que guardas con el tipo aceptado por el HashMap. En un HashMap de tipo Alumno solo puedes guardar ese tipo de dato; Si lo que intentas guardar son enteros (deduzco por el error que el valor devuelto por getExpediente() es un int), cambia el HashMap a tipo Integer:
Map<Integer, String> matriculados = new HashMap<Integer, String>();
#166 no he tocado nada de java 8, de hecho no toco java desde el curso pasado xD
#163 Si el expediente es una clave única del alumno (que debería serlo) pues puedes dejarlo así pero dependiendo de cómo esté hecha la aplicación y para qué lo uses, tendrás que tener el otro sitio alguna forma de sacar el alumno mediante su expediente (por ejemplo mediante otro map relacionando expediente-alumno para que sea más rápido).
Vamos yo lo haría así pero porque no sé pensar de otra forma que no sean claves primarias salvo cosas concretas xD
#165 En java8 (que doy por hecho que es lo que está usando) se infiere el tipo del hashmap por la declaración, vamos que con poner esto le valdría
Map<Integer, String> matriculados = new HashMap<>();
Hola, vengo a ver si podéis ayudarme con un ejercicio muy simple que no logro resolver.
A partir de un vector de n elementos y un indice, tengo que crear otro vector con los mismos números pero sin el elemento que hay en el indice pasado por parámetro, es decir, el nuevo vector siempre sera de n-1 de longitud que el original.
Tengo esto:
public double[] vectorWithoutelement(double[] v, int p) {
double[] vectorResultant = new double[v.length-1];
p = p-1; //para igualarlo al correspondiente indice para array
for (int i = 0; i <= v.length-1; i++){
if (i != p){
vectorResultant[i] = v[i];
} else {
vectorResultant[i] = v[i+1];
i++;
}
}
System.out.println(vectorResultant.toString());
return vectorResultant;
}
Evidentemente este código solo me funciona si le paso por parámetro el indice 4 ya que de al pasarle uno distinto me dice que se fue del array.
He probado ya de muchas formas, algunas donde el indice que me marca el usuario convierte el elemento en 0.
Edit: No puedo usar bibliotecas
#168 claro, la cuestión es que no sé exactamente que hacer cuando p==1, es decir no tengo que meterlo en el array, pero me pone 0 por defecto.
#170 si, esto ya lo probé y no funciona, como ya te digo cuando detecta ese i==p pone un 0 como valor. No se lo salta sin mas.
Gracias de todas formas
Aquí el resultado
double[] v= {1,2,3,4,5,6,7,8};
p.vectorWithoutelement(v,2)
[D@403ea216
{ 1.0, 0.0, 3.0, 4.0, 5.0, 6.0, 7.0 }
p.vectorWithoutelement(v,5)
[D@1aec80f4
{ 1.0, 2.0, 3.0, 4.0, 0.0, 6.0, 7.0 }
#172 mira, como puedes comprobar, pone un 0 y como el array tiene -1 de longitud que la original no llega al 8
public static void main(String[] args) {
Double[] viejo = { 1.0, 2.0, 3.0, 4.0 };
Double[] nuevo = new Double[viejo.length-1];
int borrar = 2, passed = 0;
for (int i=0; i<viejo.length; i++) {
if (i != borrar) {
nuevo[ i - passed ] = viejo[ i ];
} else {
passed = 1;
}
}
System.out.println(Arrays.deepToString(nuevo));
}
#172 puedes usar dos índices a modo de iterador, uno para recorrer tu vector original y otro para el nuevo vector. De esta manera, haces un bucle en el que compruebas si el índice no es el que buscas, en cuyo caso lo copias al vector resultante. Si por el contrario es el índice que buscas, entonces aumentas en uno el índice que usas para recorrerte el vector original y no copias el dato al vector resultante.
Es una de las muchas formas que se puede hacer.
#173 No puedes tener un array de por ejemplo, 4 posiciones, y dejar 2 de ellas vacías.
Array de longitud 4: [0,1,2,4] -> válido
Array de longitud 4: [0, null, 2, 4] -> no válido
Cuando llegas a la posición que has de excluir, no puedes "no hacer nada", ya que esa posición debe ser ocupada por un integer en este caso, sí o sí.
Cuando llegas a esa posición (i), debes enchufarle el elemento que está en i+1 en el array original.
Te inserto el código, aunque sería mejor que lo hicieras por tu cuenta y después comparases.
import java.util.Arrays;
public class Prueba {
public static void main(String args[]) {
int[] source = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int[] destiny = new int[source.length - 1];
int stop = 5; //Se supone que esto te llega por parámetro, es la posición "crítica"
for(int i=0; i<source.length; i++) {
if(i < source.length - 1) { //Para que no te salgas por fuera del array
if(i == stop) {
destiny[i] = source[i+1];
} else {
destiny[i] = source[i];
}
}
}
System.out.println("Hola soy el array original: " + Arrays.toString(source));
System.out.println("Hola soy el array resultado: " + Arrays.toString(destiny));
}
}
Yep, edito para decirte que los arrays empiezan por la posición 0; si lo que quieres es excluir contando desde la posición 1, puedes o bien modificar la variable stop (le restas 1), o modificas los índices de recorrido del array.
Gracias a todos por la ayuda, la solución correcta es la de #174 . #176 Lo que has hecho ahí yo ya lo probé, cuando llega a la posición crítica coge el siguiente numero bien, pero luego el siguiente se repetirá, es decir, saldrá una cosa así: 1,2,3,4,5,6 si la posición critica es 2, sale 1,3,3 .....
Para mi lo más fácil sería recorrer el vector añadiendo los elementos a un arrayList y al acabar transformarlo a un array de nuevo algo así
List<Integer> lista = new ArrayList<Integer>(0);
Integer[] nuevo= new Integer[viejo.length-1];
for (int i=0; i<viejo.length; i++) {
if (i != borrar) {
lista.add(viejo[ i ]);
} else {
}
}
lista.toArray(nuevo);
donde el borrar seria el indice que quieres eliminar luego ya usa el metodo que quieras
#178 Lo más fácil y one liner:
List<Double> nuevo = Arrays.asList(arrayViejo);
nuevo.remove(i);
imprime;
Hola, siento llegar tarde, no sé porqué no me saltaban los favoritos, la solución que te han dado está bien, pero lo suyo sería evitar los ifs sin incrementar la complejidad del algoritmo (seguiría siendo O(n)) y creo que queda más visible de la siguiente forma:
public static double[] arrayWithoutElement(double[] v, int p) {
double[] arrayNew = new double[v.length-1];
int count = 0;
while (v[count] != p ){
arrayNew[count]=v[count++];
}
while(count < arrayNew.length){
arrayNew[count] = v[count+1];
count++;
}
return arrayNew;
}
Basicamente vas rellenando el nuevo array con tamaño el anterior-1 hasta que encuentras el elemento, una vez lo encuentras rellenas desde esa posicion saltandote una. Evidentemente lo suyo sería comprobar con otra función, boolean, existsElement para evitar que salte una excepción de array fuera de límites.
Un saludo.