Hilo General - Dudas de Java

tOWERR

#29

¿Que programa utilizas para diseñar los JFrame en Java?

2 respuestas
mnDl

¿Alguien sabe si al introducir una imagen en un JButton, hay alguna manera para poder redimensionar la imagen que aparezca en el tamaño exacto del botón?

Tengo una imágen más grande que el botón y solo aparece un trozo...

litoss

#31 Netbeans si es a lo que te refieres xd.

darkblade60

#31 los ha hecho a mano.

16 días después
Ronso

Tengo una dudilla...

public class RepasoEva1 
{
    public static void main(String[] args) 
    {
        int menu=0;
        boolean leido = false;
       
Scanner teclado = new Scanner(System.in); do { do { System.out.println("MENU PRINCIPAL:"); System.out.println("1 - Decir Hola"); System.out.println("2 - Decir Adios"); System.out.println("3 - Salir"); do { try { menu= teclado.nextInt(); leido = true; } catch(Exception e) { teclado = new Scanner(System.in); System.out.println(" ERROR: se esperaba un entero"); } }while (!leido); }while (menu <0 || menu >3); }while (menu !=3); } }

No se exactamente que hace esto en el Catch.

teclado = new Scanner(System.in);

Ya que si lo quito me crea un bucle infinito, y si lo dejo funciona de lujo, se que tiene que estar ahí, pero no el porque xD. Si alguien me hace una pequeña referencia...

Un saludo y gracias!

#36 Ok gracias!

2 respuestas
zoeshadow

#35 Eso lo que hace es que en caso de que no metas un entero, te pida que introduzcas algo por teclado otra vez.
Y si lo quitas, al quedarse la variable "menu" con el caracter no entero que has introducido, se repite una y otra vez.

2 respuestas
elkaoD

#35 #36 correcto, aunque es de notar que usar try/catch para cambiar cambiar el flujo de la lógica del programa es una mierda como la copa de un pino xD

1 respuesta
Wasd

Según tengo entendido el contenido del catch aparece cuando hay un error en el programa (no se cumple alguna de las funciones del try, le das a una variable mas valor del que le cabe, etc...).
Quiero decir, que como dice #37, utilizarlo como si fuese otro while es... curioso xD.

1 respuesta
elkaoD

#38 no es que lo use como si fuera otro while, es el mismo while, lo que pasa es que en el catch se cambia la condición de control del while que es la cosa más fea y poco mantenible del mundo.

Si pasas la linea teclado = new Scanner(System.in); justo antes del try debería funcionar igual y es bastante más acorde con lo que pretende representar un bloque try-catch.

De hecho, ahora que lo pienso... ¿no es completamente innecesario rehacer el scanner? Bastaría con que se ejecutara de nuevo el nextInt(). ¿O se destruye el objeto por alguna razón que no entiendo?

2 respuestas
Ronso

#39 Ahora mismo estoy sin hacer nada de objetos, la verdad que el código es de otra práctica que pille con objetos, no se si influirá con eso. Y ya te digo como lo he pillado de una práctica resuelta lo dejaré así por ahora, si más adelante vemos algo más "innovador" en el sistema try/catch pues mejor, si no ya innovaré algo jeje.

Un saludo y gracias!

#41 Ni yo sé lo que te he contestado xD, pero bueno... jajaja estoy mu quemao ya hoy de picar código xD

1 respuesta
elkaoD

#40 no me he enterado mucho de lo que comentas de los objetos xD

1 respuesta
zoeshadow

#39 Es curioso que si pones otro nextInt() dentro del catch te tira un error, así que el que haya hecho ese ejercicio lo ha debido hacer así por alguna razón desconocida xD

1 respuesta
elkaoD

#42 hombre el nextInt() donde está, en el try por favor!! xD

1 respuesta
zoeshadow

#43 me refiero, si pones un nextInt en el try y otro en el catch ( para que se repita en caso de que el usuario no meta un int, da error ).

#45 Si no lo pones e introduces algo que no sea un int, se queda eso en un bucle infinito en el que te sale el menú y el texto de error, si no me explico bien puedes probarlo en un minuto y se ve facil lo que te digo.

1 respuesta
elkaoD

#44 si no lo pones en el catch se repite igual. Estás en un while. Si lo hicieras en el catch, sólo se repite una vez.

#44 sí, vale, si eso ya te lo he leído. A lo que me refiero es... ¿por qué? ¿Por qué hay que recrear el Scanner antes de la siguiente llamada a nextInt()? ¿No será que hay flushear o algo así?

1 respuesta
Josepanaero

Yo estoy teniendo un error con el plugin para navegadores del último JRE (1.7.0u02). Uso Windows 7 x64, me bajé la JDK para 64 bits, pero no se me carga el plugin en ninguno de los navegadores que lo he usado (Firefox, Chrome, IE, IEx64). En principio pensé que sería porque al ser la versión de JRE de 64 bits, no funciona en navegadores de 32 bits, como el firefox, por ejemplo, pero es que en IEx64 tampoco se me cargan los Applets que estoy programando...

Ya he mirado en la configuración de java que el plugin esté activado para navegadores tipo Mozilla, también he buscado información por internet, y mis applets funcionan seguro, porque estoy programando desde Eclipse y ahí puedo comprobar que van bien. También los he probado en un windows xp (32 bits) y ahí sí funciona bien el plugin para firefox.

¿Alguna idea?

1 respuesta
elkaoD

#46 pero no carga el plugin o no carga el applet? Si el plugin carga, mira a ver qué te dice la consola. Si ni siquiera te carga el plugin, ¿te fallan todos los applets o sólo los tuyos? Si funciona en el resto de applets y el tuyo tira en Eclipse, has embebido mal el objeto.

OJO, que funcione en Eclipse con el AppletViewer no significa que funcione en un applet por defecto. La implementación es ligeramente más permisiva en el AppletViewer.

OJO2, quizá si estás tirando de algún tipo de DLL (por ejemplo, si usas LWJGL para usar OpenGL en el applet) te falte referenciar los binarios de 64bits.

1 respuesta
Josepanaero

#47, no carga el plugin, no me sale en la lista de plugins. Fallan todos los applets, porque en la página de Oracle en la que me dice si está correctamente instalado, sale que no. El objeto está bien embebido, porque lo he probado en otro ordenador con windows xp de 32 bits y funciona correctamente. Sobre el último párrafo, no, no estoy tirando de DLL ni nada extravagante, es una aplicación usando Swing superbásica.

Estoy casi seguro de que el problema es de la versión x64 de la JRE 1.7.0u2, porque esa misma versión, pero de 32 bits, la probé en otro ordenador con windows xp y funciona. También probé a instalar la de x64 en otro ordenador distinto con Windows 7 de 64 bits y tampoco iba...

TaiCHoKe

Yo tengo una dudilla de JSP pero la pongo aqui de todas formas a ver si alguien sabe algo.
Se pueden pasar valores de JSP a javascript sin usar cookies?

12 días después
Lecherito

Buenas, expongo la duda sin más dilacion:

Tengo que calcular el tiempo que tarda una función en ejecutarse, estoy en Ubuntu concretamente, y no tengo ni puta idea de como es el método getMiliseconds o algo así para obtener el tiempo de reloj del pc y luego restarlo una vez haya obtenido el tiempo. Alguno me podría echar una mano? no encontré nada que me funcionase en google >.<

1 respuesta
TaiCHoKe

#50 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

Ronso

Me ha surgido una dudilla, para algunos será estúpida pero es que me he quedad owned... Como puedo mostrar dos variables sin sumarlas... os pongo el ejemplo...

for (int calificacion = 1; calificacion < frecuencia.length; calificacion++)
		{
			System.out.println(calificacion + frecuencia[calificacion]);
		}

Querría visualizar algo así:

1              3
2              5
3              2
.               .
.               .
.               .

EDITO: es lo que tiene llevar un tiempo dandole vueltas sin estar en lo que se esta xD

System.out.println(calificacion +"       "+ frecuencia[calificacion]);

Tenia que poner el espacio, que estoy gilipollas xD

1 respuesta
Lecherito

#52 Quizá con un \t (tabulación) te quede más bonito, es sólo cuestión de estetica jeje

Yo... hacía bien lo de los milisegundos, pero le pasaba a la función un número que no permitía T_T, y claro, no hacía nada y me devolvía el mismo tiempo, ya está todo solucionado xD

zoeshadow

Una duda que espero que sea sencillita, hay alguna clase y/o funcion que vaya agregando numeros a una "cadena de numeros".

Es decir, que sea lo mas parecido a un String ( lo he intentado hacer con un String y se complica mucho el tema entre Parse Int etc etc )

P ej. Tenemos el numero 123, el usuario introduce el numero 1 y quiero que la variable añada ese 1 al final de la cadena, quedando 1231, con ese numero luego tengo que poder realizar operaciones, así que no puede quedar con String, Array ni nada por el estilo.

¿Alguna idea?

2 respuestas
tOWERR

#54

Esa cadena para sumarla como entero, lo conviertes con:

Integer.parseInt(String);

No tiene ninguna complicación la conversión creo, y lo de concatenar en el "String" vas concatenando no veo ninguna dificultad creo yo.

Ronso

Una duda de formato... usáis print o prinf ?? Es que desde que empecé el curso estoy con el print y println, pero a la hora de ajustar veo más bien usar el printf y no usar los + para concatenar y usar mejor las , .

Sergeon

#54

A mí me queda así:


public static int concatenar(Integer num, Integer nuevoNum){
		 
	 StringBuffer cadena = new StringBuffer( num.toString()+nuevoNum.toString());
	 num = Integer.parseInt(cadena.toString());
	 return num;

 }//fin concatenar(2Integers)

Lo hago con StringBuffer porque gestiona mejor la memoria cuando le sumas cosas, o eso me han dicho.

Soy muy novato así que es muy posible que haya soluciones mejores.

1 respuesta
dagavi

#57 No estás usando para nada StringBuffer, estás usando la concatenación con el + de strings (string + string) y creando un objeto StringBuffer con ese contenido.

Tienes que usar el método "append" de StringBuffer o StringBuilder, una por string.

Aquí te hablan del tema de la eficiencia y ponen un código de ejemplo para provarla http://www.dosideas.com/noticias/java/339-string-vs-stringbuffer-vs-stringbuilder.html

Ejecutados en mi pc (el código que ponen en esa web para medir los rendimientos) me dan:
Tiempo del StringBuffer: 46 milisegundos
Tiempo del StringBuilder: 24 milisegundos
Operador suma: Lo he parado, lleva minutos y aun no ha acabado

Pero bueno, que si se usa poco un + tampoco hace daño.

1
Wasd

Buenas! Posteo para ver si podéis ayudarme a resolver esta duda que tengo:
Tengo que hacer un programa muy simple, consiste en que me ordene de menor a mayor una serie de caracteres/números que el usuario mismo introduce.
He hecho una especie de ordenación de burbuja pero no he querido basarme en otros códigos, me gusta estrujarme el cerebro, pero no le encuentro sentido a lo que me pasa aquí, este es el código:

import java.io.*;
public class ex12 {
	public static void main (String args[]){
		
	InputStreamReader isr = new InputStreamReader(System.in);
	BufferedReader buffer = new BufferedReader(isr);
	try{	
		
		System.out.println("Escribe los caracteres que quieras para que sean ordenados alfabéticamente");
		String intro = buffer.readLine();
		int num = intro.length();
		char[][] hola = new char[1][num];
		char a;
		int menor = 0;
		System.out.println("Se van a ordenar " + num + " caracteres...");
			for(int y = 0; y < num; y++){
				hola[0][y] = intro.charAt(y);
			}
			for(int y = 0; y < num - 1; y++){
				if(hola[0][y] < hola[0][y + 1] && y != (num)){
					menor++;
				}
				if(hola[0][y] == hola[0][y + 1] && y != (num)){
				}	
				if(hola[0][y] > hola[0][y + 1] && y != (num)){
					a = hola[0][y + 1];
					hola[0][y + 1] = hola[0][y];
					hola[0][y] = a;	
					y = 0;
				}
				if(y == (num - 1)){	
					if(menor == (num)){
					}
					else{
						
					}
				}
			}
			for(int y = 0; y < num; y++){
				System.out.print(hola[0][y] + " ");
			}
	}
	catch(Exception e){
		System.out.println("Error en la introduccion de datos por parte del usuario");
	}
}
}

El caso es que con cadenas complejas de caracteres, el programa funciona correctamente, ejemplo:

Escribe los caracteres que quieras para que sean ordenados alfabéticamente
iadgiuesghlerjghlskjdghklajsfglskjdgskljdfhsiefhslkdjhg
Se van a ordenar 55 caracteres...
a a d d d d d e e e f f f g g g g g g g h h h h h h i i i j j j j j j k k k k k l l l l l l r s s s s s s s u 

Sin embargo, si pongo un simple "omg", no me lo ordena como debería (o eso, o me estoy olvidando del abecedario, o ascii se está desordenando a sí mismo):

Escribe los caracteres que quieras para que sean ordenados alfabéticamente
omg
Se van a ordenar 3 caracteres...
m g o 

Si uso otras combinaciones se ordena correctamente, pero en esta (que la hice por probar, pero me frustra que no funcione bien) no tira...

1 respuesta
elkaoD

#59 te estás frustrando porque el código es una mierda (con perdón.) Aparte de los if vacíos (:S) modificas el valor del contador dentro del bucle, lo cual no tiene sentido dentro de un for. Para eso usa un while que es más claro y muestra mejor tus inte3nciones.

Te recomiendo que antes que estrujarte la cabeza entiendas bien algoritmos básicos. Hazte el bubblesort BIEN y ya coges ideas para futuros algoritmos. Si no conoces bien las estructuras básicas te saldrá mal sí o sí. La algoritmia es complicada y más si no tienes experiencia previa.

Así entre la maraña de código he podido ver que vuelves y=0 en cuanto encuentras un swap. ¡Mal! Hazte la cadena entera, no tienes que reiniciar cada vez que hagas swap. Cuando acabes la cadena, si ha habido swap comienzas de nuevo. Si no ha habido swap, es que ya está ordenado.

1 respuesta
Tema cerrado