frekency escribió:No estoy seguro pero al final consegui que diera 5.0 haciendo esto
double division = (double)(7*7)/10; //4.9
System.out.println(division);
double numBarcos = (int)(division+0.5); //5.4 // Redondeado 5.0
System.out.println(numBarcos);
Y con esto le quitaba el .0
int finalBarcos=(int) (numBarcos/1); // 5
Reconozco que esto me ha pillado por sorpresa, se que esto me salio una vez y lo solucione puede que de alguna forma mas facil con algun metodo o algo.
round
public static int round(float a)
Returns the closest int to the argument. The result is rounded to an integer by adding 1/2, taking the floor of the result, and casting the result to type int. In other words, the result is equal to the value of the expression:
(int)Math.floor(a + 0.5f)
Special cases:
* If the argument is NaN, the result is 0.
* If the argument is negative infinity or any value less than or equal to the value of Integer.MIN_VALUE, the result is equal to the value of Integer.MIN_VALUE.
* If the argument is positive infinity or any value greater than or equal to the value of Integer.MAX_VALUE, the result is equal to the value of Integer.MAX_VALUE.
Parameters:
a - a floating-point value to be rounded to an integer.
Returns:
the value of the argument rounded to the nearest int value.
Duqe escribió:Muchas gracias a los 2. Ha quedado bastante claro. Voy a probar.
Editado:
Como lo veis asi:
double division = (double) (((ancho * alto) / 10.0) + 0.5);
int numBarcos = (int) division;
O hay una forma mejor de hacerlo? Funcionar funciona.
redscare escribió:Duqe escribió:Muchas gracias a los 2. Ha quedado bastante claro. Voy a probar.
Editado:
Como lo veis asi:
double division = (double) (((ancho * alto) / 10.0) + 0.5);
int numBarcos = (int) division;
O hay una forma mejor de hacerlo? Funcionar funciona.
Hombre, funcionar funciona pero es un poco cutre
Lo suyo sería hacer el redondeo de forma explícita sin sumarle ahí 0.5
int numBarcos = (int) Math.ceil((double)ancho * alto / 10);
(en el momento en que cualquier nº de una operación matemática es double, el resultado se castea a double automáticamente)
static double rint(double num): devuelve el double-entero redondeado y asociado al argumento que se le pasa, tomando como cifra base para el redondeo, la primera después de la coma del argumento, y siguiendo los criterios habituales de redondeo
NOTA: si la cifra base para el redondeo es mayor o igual que 5, se aumenta en una unidad la cifra anterior; si la cifra base es menor que 5, no se modifica la cifra anterior.
Si se quiere redondear a partir de una determinada cifra decimal, se multiplicará por la potencia de 10 que corresponda, se aplicará el método y, después, se dividirá entre la potencia de 10 por la que anteriormente se ha multiplicado.
Ejemplo:
System.out.println(Math.rint(0.891));// muestra por consola 1.0
Si se quisiera aproximar a dos decimales:
System.out.println(Math.rint(0.891*100)/100);// muestra por consola 0.89
Duqe escribió:No me sirve. Si lo hago asi y ancho y alto son 9 y 9, numBarcos vale 9. Segun leo aqui:
http://www.adrformacion.com/cursos/java ... ial10.html
Me redondeara al siguiente numero entero si el valor tiene algun decimal. Yo lo que quiero es que si el valor decimal es igual o mayor a 0.5 me lo redondee al siguien valor entero. Si es inferior a 0.5, me lo redondee al anterior valor entero.
Duqe escribió:Mmm, pues algo falla. Por que con esto:
double numBarcos = Math.rint((ancho * alto) / 10);
numBarcos = 4.
Yakerton escribió:Hace un rato el ordenador me dejo de funcionar bien y no podia entrar en internet por mas que quisiera y varias cosas mas, asi que he tenido que restaurar el sistema.
Todo bien excepto una cosa, tengo problemas con java.
He intentado iniciar el jdowloader y me ha saltado una ventanita diciendo noseque de java no exist.
Me he descargado la ultima version se java pero vamos ya tenia la ultima asi que nada.
He ido al panel de control y he desinstalado java, me he descargado despues desde java la update 6 vamos la ultima y me sale esto
He entrado donde me dice y he borrado el archivo pero nada, sigue sin ir.
¿ayuda?
uso win 7 32 bit.
<mapping resource="ejemploHibernate/ejemplohibernate/Event.hbm.xml" />
zaius5 escribió:Estoy probando con hibernate pero al intentar cargar el archivo de mapeo me sale la excepcion .org.hibernate.MappingNotFoundException
si el package se llama ejemplohibernate y el proyecto ejemploHibernate (solo cambia la h mayuscula) como quedaria la linea de mapping resource de archivo .cfg.xml? probé con<mapping resource="ejemploHibernate/ejemplohibernate/Event.hbm.xml" />
alguien me sabria decir que tengo mal?
Nagaroth escribió:Ya estoy por aquí con otra duda
Esta vez tengo que crear un formulario HTML (muy sencillo, un campo de texto y un botón para enviar) que la primera vez que se use llame a un servlet (el cual busca en una BBDD lo tecleado y devuelve las coincidencias) y la segunda vez y posteriores llame a otro servlet diferente. Tengo todo creado y funcionando perfectamente, pero no se me ocurre como hacer para que llame a uno u otro servlet ya que como requisito no puedo utilizar sesiones. El formulario tiene que ser en HTML, nada de JSP ni otras alternativas.
¿Alguna idea?
Nagaroth escribió:Ya estoy por aquí con otra duda
Esta vez tengo que crear un formulario HTML (muy sencillo, un campo de texto y un botón para enviar) que la primera vez que se use llame a un servlet (el cual busca en una BBDD lo tecleado y devuelve las coincidencias) y la segunda vez y posteriores llame a otro servlet diferente. Tengo todo creado y funcionando perfectamente, pero no se me ocurre como hacer para que llame a uno u otro servlet ya que como requisito no puedo utilizar sesiones. El formulario tiene que ser en HTML, nada de JSP ni otras alternativas.
¿Alguna idea?
rintin escribió:Nagaroth escribió:Ya estoy por aquí con otra duda
Esta vez tengo que crear un formulario HTML (muy sencillo, un campo de texto y un botón para enviar) que la primera vez que se use llame a un servlet (el cual busca en una BBDD lo tecleado y devuelve las coincidencias) y la segunda vez y posteriores llame a otro servlet diferente. Tengo todo creado y funcionando perfectamente, pero no se me ocurre como hacer para que llame a uno u otro servlet ya que como requisito no puedo utilizar sesiones. El formulario tiene que ser en HTML, nada de JSP ni otras alternativas.
¿Alguna idea?
Si puedes utilizar php no hay problema. Un if bien majo y listo.
import java.util.*;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class generador {
static Scanner miscaner = new Scanner(System.in);
static int x;
static char pant;
public static void main(String[] args) {
PrintStream DDescriptor = null;
try {
DDescriptor = new PrintStream("Resultados.txt");
System.out.println("Hola, bienvenido al programa generador de codigos hexadecimal");
System.out.print("Por favor, indique de cuantas cifras es el codigo que quereis generar: ");
x = miscaner.nextInt();
//System.out.print("¿¿Deseas ver los resultados en pantalla?? [Y/N]: ");
//char pant = (char) System.in.read();
for (int i = 0; i < Math.pow(16, x); i++) {
String aux = Integer.toHexString(i).toString();
if (aux.length() < x) {
for (int j = aux.length(); j < x; j++) {
aux = "0".concat(aux);
}
}
DDescriptor.println(aux.toUpperCase());
//System.out.println(aux.toUpperCase());
}
} catch (Exception ex) {
Logger.getLogger(generador.class.getName()).log(Level.SEVERE, null, ex);
} finally {
DDescriptor.close();
System.out.print( "Fichero Resultados.txt generado.");
}
}
}
sostaco escribió:Vereis, el problema que tengo es el siguiente. Copiado literalmente del subforo de pruebas.
Bueno, hace unos dias abri un hilo en el que estaba haciendo un programa para generar codigos hexadecimales de x cifras. Pues bien, el programa lo tengo terminado, y cuando voy a ejecutarlo desde bluej lo hace a las mil maravillas, pero cuando creo el jar, y lo ejecuto, este se pone en marcha, pero yo no intervengo para nada ( En teoria me debe preguntar cuantas cifras tiene el codigo, y el solo lo genera ) y me crea un resultados.txt en blanco.
Aqui os dejo el codigo:import java.util.*;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class generador {
static Scanner miscaner = new Scanner(System.in);
static int x;
static char pant;
public static void main(String[] args) {
PrintStream DDescriptor = null;
try {
DDescriptor = new PrintStream("Resultados.txt");
System.out.println("Hola, bienvenido al programa generador de codigos hexadecimal");
System.out.print("Por favor, indique de cuantas cifras es el codigo que quereis generar: ");
x = miscaner.nextInt();
//System.out.print("¿¿Deseas ver los resultados en pantalla?? [Y/N]: ");
//char pant = (char) System.in.read();
for (int i = 0; i < Math.pow(16, x); i++) {
String aux = Integer.toHexString(i).toString();
if (aux.length() < x) {
for (int j = aux.length(); j < x; j++) {
aux = "0".concat(aux);
}
}
DDescriptor.println(aux.toUpperCase());
//System.out.println(aux.toUpperCase());
}
} catch (Exception ex) {
Logger.getLogger(generador.class.getName()).log(Level.SEVERE, null, ex);
} finally {
DDescriptor.close();
System.out.print( "Fichero Resultados.txt generado.");
}
}
}
Y os subo tambien el .class para ver si alguien me puede echar una mano.
Muchas Gracias
El programa en cuestion hace lo siguiente. Te crea todos los codigos hexadecimales posibles de X cifras, dandole tu el valor X.
x = miscaner.nextInt();
x = miscaner.nextInt();
System.out.println("Has introducido: "+x);
mrm_arrasate escribió:sostaco escribió:Vereis, el problema que tengo es el siguiente. Copiado literalmente del subforo de pruebas.
Bueno, hace unos dias abri un hilo en el que estaba haciendo un programa para generar codigos hexadecimales de x cifras. Pues bien, el programa lo tengo terminado, y cuando voy a ejecutarlo desde bluej lo hace a las mil maravillas, pero cuando creo el jar, y lo ejecuto, este se pone en marcha, pero yo no intervengo para nada ( En teoria me debe preguntar cuantas cifras tiene el codigo, y el solo lo genera ) y me crea un resultados.txt en blanco.
Aqui os dejo el codigo:import java.util.*;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class generador {
static Scanner miscaner = new Scanner(System.in);
static int x;
static char pant;
public static void main(String[] args) {
PrintStream DDescriptor = null;
try {
DDescriptor = new PrintStream("Resultados.txt");
System.out.println("Hola, bienvenido al programa generador de codigos hexadecimal");
System.out.print("Por favor, indique de cuantas cifras es el codigo que quereis generar: ");
x = miscaner.nextInt();
//System.out.print("¿¿Deseas ver los resultados en pantalla?? [Y/N]: ");
//char pant = (char) System.in.read();
for (int i = 0; i < Math.pow(16, x); i++) {
String aux = Integer.toHexString(i).toString();
if (aux.length() < x) {
for (int j = aux.length(); j < x; j++) {
aux = "0".concat(aux);
}
}
DDescriptor.println(aux.toUpperCase());
//System.out.println(aux.toUpperCase());
}
} catch (Exception ex) {
Logger.getLogger(generador.class.getName()).log(Level.SEVERE, null, ex);
} finally {
DDescriptor.close();
System.out.print( "Fichero Resultados.txt generado.");
}
}
}
Y os subo tambien el .class para ver si alguien me puede echar una mano.
Muchas Gracias
El programa en cuestion hace lo siguiente. Te crea todos los codigos hexadecimales posibles de X cifras, dandole tu el valor X.
Una pregunta absurda (teniendo en cuenta que no suelo programar Java por línea de comandos, normalmente hago una interfaz gráfica o vía web, pero bueno...) ¿Como te aseguras que se queda esperando a que el usuario ha introducido el número que le pides?x = miscaner.nextInt();
¿Se queda esperando en esa línea hasta que recoge algo?
Yo creo que ejecuta todo el programa sin esperar a que le llegue un carácter. ¿Has probado a mostrar en pantalla el valor de "x" después de recogerlo?. Algo así:x = miscaner.nextInt();
System.out.println("Has introducido: "+x);
Así sabrás si se queda esperando o no.
Espero que te sirva.
Saludos!
sostaco escribió:Vereis, el problema que tengo es el siguiente. Copiado literalmente del subforo de pruebas.
Bueno, hace unos dias abri un hilo en el que estaba haciendo un programa para generar codigos hexadecimales de x cifras. Pues bien, el programa lo tengo terminado, y cuando voy a ejecutarlo desde bluej lo hace a las mil maravillas, pero cuando creo el jar, y lo ejecuto, este se pone en marcha, pero yo no intervengo para nada ( En teoria me debe preguntar cuantas cifras tiene el codigo, y el solo lo genera ) y me crea un resultados.txt en blanco.
Aqui os dejo el codigo:import java.util.*;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class generador {
static Scanner miscaner = new Scanner(System.in);
static int x;
static char pant;
public static void main(String[] args) {
PrintStream DDescriptor = null;
try {
DDescriptor = new PrintStream("Resultados.txt");
System.out.println("Hola, bienvenido al programa generador de codigos hexadecimal");
System.out.print("Por favor, indique de cuantas cifras es el codigo que quereis generar: ");
x = miscaner.nextInt();
//System.out.print("¿¿Deseas ver los resultados en pantalla?? [Y/N]: ");
//char pant = (char) System.in.read();
for (int i = 0; i < Math.pow(16, x); i++) {
String aux = Integer.toHexString(i).toString();
if (aux.length() < x) {
for (int j = aux.length(); j < x; j++) {
aux = "0".concat(aux);
}
}
DDescriptor.println(aux.toUpperCase());
//System.out.println(aux.toUpperCase());
}
} catch (Exception ex) {
Logger.getLogger(generador.class.getName()).log(Level.SEVERE, null, ex);
} finally {
DDescriptor.close();
System.out.print( "Fichero Resultados.txt generado.");
}
}
}
Y os subo tambien el .class para ver si alguien me puede echar una mano.
Muchas Gracias
El programa en cuestion hace lo siguiente. Te crea todos los codigos hexadecimales posibles de X cifras, dandole tu el valor X.
Guntharc escribió:Hola, necesito ayuda con un programa. Estoy intentando hacer un simulador de algoritmos de planificacion de procesos en Java con Netbeans. Pero no se como trabajar con tablas dinamicas y no se como introducir los datos de las tareas en la tabla y que esta vaya aumentando de filas. (Este es el primero de mis problemas).
¿Hay alguien en Córdoba (España) que domine esto y quiera dar algunas clases particulares? o si sabeis de alguna academia o algo x aki tambien me vale...
Saludos.
Tanke2K2 escribió:Guntharc escribió:Hola, necesito ayuda con un programa. Estoy intentando hacer un simulador de algoritmos de planificacion de procesos en Java con Netbeans. Pero no se como trabajar con tablas dinamicas y no se como introducir los datos de las tareas en la tabla y que esta vaya aumentando de filas. (Este es el primero de mis problemas).
¿Hay alguien en Córdoba (España) que domine esto y quiera dar algunas clases particulares? o si sabeis de alguna academia o algo x aki tambien me vale...
Saludos.
¿Has probado a usar ArrayList? Y simular las tablas con esto, te ahorras tener que estar pendiente del redimensionamiento de estas. Tambien puedes intentar tener Arrays "tipicos" e ir creando nuevos y copiando el contenido...pero no se como será eso de eficiente.
Lo que se me pide es lo siguiente:
-Desarrollar una clase llamada Alumno que:
Tenga tres atributos private de tipo Asignatura
Tenga un constructor con tres parametros de tipo Asignatura que inicialice los tres atributos.
Tenga un constructor con tres parametros de tipo int que inicialice los tres atributos.
Tenga un getter para cada uno de los atributos.
public class Asignatura {
private int identificador;
private double nota;
public Asignatura(int param1){}
public int getIdentificador()
{
return identificador;
}
public double getNota()
{
return nota;
}
public void setNota(double no)
{
nota = no;
}
}
public class Alumno {
private Asignatura Historia;
private Asignatura Matematicas;
private Asignatura Informatica;
public Alumno(){
Asignatura = new Historia();
Asignatura = new Matematicas();
Asignatura = new Informatica();
}
}
public class Alumno {
private Asignatura Historia;
private Asignatura Matematicas;
private Asignatura Informatica;
public Alumno(){
Historia = new Asignatura ();
Matematicas = new Asignatura ();
Informatica = new Asignatura ();
}
}
public class Alumno {
private Asignatura historia;
private Asignatura matematicas;
private Asignatura informatica;
public Alumno(Asignatura historia, Asignatura matematicas, Asignatura informatica){
this.historia = historia;
this.matematicas = matematicas;
this.informatica = informatica;
}
}
public Asignatura getHistoria(){
return this.historia;
}
public Alumno(Asignatura varHistoriaOut, Asignatura varMatematicasOut, Asignatura varInformaticaOut){
historia=varHistoriaOut;
............
}
}
public class Alumno {
private Asignatura historia;
private Asignatura matematicas;
private Asignatura informatica;
public Alumno(Asignatura historia, Asignatura matematicas, Asignatura informatica)
{
this.historia = new Asignatura();
this.matematicas = new Asignatura();
this.informatica = new Asignatura();
}
public Alumno (int a, int b, int c){
this.a = new historia ();
this.b = new matematicas ();
this.c = new informatica();
}
public Asignatura getHistoria(){
return this.historia;
}
public Asignatura getMatematicas(){
return this.matematicas;
}
public Asignatura getInformatica(){
return this.informatica;
}
}
lordvil escribió:A ver que tal esto:public class Alumno {
private Asignatura historia;
private Asignatura matematicas;
private Asignatura informatica;
public Alumno(Asignatura historia, Asignatura matematicas, Asignatura informatica)
{
this.historia = new Asignatura();
this.matematicas = new Asignatura();
this.informatica = new Asignatura();
}
public Alumno (int a, int b, int c){
this.a = new historia ();
this.b = new matematicas ();
this.c = new informatica();
}
public Asignatura getHistoria(){
return this.historia;
}
public Asignatura getMatematicas(){
return this.matematicas;
}
public Asignatura getInformatica(){
return this.informatica;
}
}
Gracias a bitman tambien por la ayuda
Desarrollar una clase llamada Profesor que:
Tenga un método ponerNotas que recibe un parámetro de tipo Alumno y que no devuelve nada. Pondrá una calificación aleatoria a cada una de las asignaturas del alumno.
Tenga un método calcularMedia que recibe un parámetro de tipo Alumno y devuelve un double.
public class Profesor {
public ponerNotas (Alumno param ){
Alumno.historia = Math.random();
Alumno.matematicas = Math.random();
Alumno.informatica = Math.random();
}
public double calcularMedia (){
return (Alumno.historia + Alumno.matematicas + Alumno.informatica) /3;
}
}
lordvil escribió:Gracias de verdad por vuestra ayuda, si tuviera una tutora como vosotros no tendria estos problemas.
Si en cualquier momento os molesta enseñarme esto, decirmelo que ya no os molesto mas.
La tercera parte es:Desarrollar una clase llamada Profesor que:
Tenga un método ponerNotas que recibe un parámetro de tipo Alumno y que no devuelve nada. Pondrá una calificación aleatoria a cada una de las asignaturas del alumno.
Tenga un método calcularMedia que recibe un parámetro de tipo Alumno y devuelve un double.
y mi codigo (posiblemente erroneo):public class Profesor {
public ponerNotas (Alumno param ){
Alumno.historia = Math.random();
Alumno.matematicas = Math.random();
Alumno.informatica = Math.random();
}
public double calcularMedia (){
return (Alumno.historia + Alumno.matematicas + Alumno.informatica) /3;
}
}
Si puede ser no me pongais la solucion, simplemente remarcar el error y como podria solucionarse ... Gracias, gracias de verdad.
public void ponerNotas (Alumno param ){
param.historia = Math.random();
param.matematicas = Math.random();
param.informatica = Math.random();
}
lordvil escribió:Entonces el metodo de calcularMedia esta bien?
Una duda, si usamos "param.historia", como se sabe que historia es de la clase Alumno?
Desarrollar una clase llamada Actividad1 que en su método main:
Cree e inicialice tres Asignaturas.
Cree un Alumno con las tres Asignaturas.
Cree un Profesor que le ponga calificaciones al Alumno y muestre por pantalla la media del Alumno.
public class Actividad1 {
public static void main(String[] args) {
Asignatura historia = new Asignatura();
Asignatura matematicas = new Asignatura();
Asignatura informatica = new Asignatura();
Alumno daniel = new Alumno();
Profesor arancha = new Profesor();
System.out.println("la nota de historia es:" +Alumno.historia);
System.out.println("la nota de matematicas es:" +Alumno.matematicas);
System.out.println("la nota de informatica es:" +Alumno.informatica);
System.out.println("la media es:" +Profesor.calcularMedia);
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The constructor Asignatura() is undefined
The constructor Asignatura() is undefined
The constructor Asignatura() is undefined
The constructor Alumno() is undefined
The field Alumno.historia is not visible
The field Alumno.matematicas is not visible
The field Alumno.informatica is not visible
calcularMedia cannot be resolved or is not a field
at Actividad1.main(Actividad1.java:6)
Desarrollar una clase llamada Asignatura que:
Tenga dos atributos private de tipo int (el identificador) y de tipo double (la calificación).
Tenga un constructor con un parámetro de tipo int.
Tenga un getter para cada uno de los atributos.
Tenga un setter para la calificación.
public class Asignatura {
public int identificador;
public double nota;
public Asignatura(int param){}
public int getIdentificador()
{
return identificador;
}
public double getNota()
{
return nota;
}
public void setNota(double no)
{
nota = no;
}
}
Desarrollar una clase llamada Alumno que:
Tenga tres atributos private de tipo Asignatura.
Tenga un constructor con tres parámetros de tipo Asignatura que inicialice los tres atributos.
Tenga un constructor con tres parámetros de tipo int que inicialice los tres atributos.
Tenga un getter para cada uno de los atributos.
public class Alumno {
private Asignatura historia;
private Asignatura matematicas;
private Asignatura informatica;
public Alumno(Asignatura historia, Asignatura matematicas, Asignatura informatica)
{
this.historia = new Asignatura();
this.matematicas = new Asignatura();
this.informatica = new Asignatura();
}
public Alumno (int a, int b, int c){
this.a = new historia ();
this.b = new matematicas ();
this.c = new informatica();
}
public Asignatura getHistoria(){
return this.historia;
}
public Asignatura getMatematicas(){
return this.matematicas;
}
public Asignatura getInformatica(){
return this.informatica;
}
}
Desarrollar una clase llamada Profesor que:
Tenga un método ponerNotas que recibe un parámetro de tipo Alumno y que no devuelve nada. Pondrá una calificación aleatoria a cada una de las asignaturas del alumno.
Tenga un método calcularMedia que recibe un parámetro de tipo Alumno y devuelve un double.
public class Profesor {
public void ponerNotas (Alumno param ){
param.historia = Math.random();
param.matematicas = Math.random();
param.informatica = Math.random();
}
public double calcularMedia (){
return (Alumno.historia + Alumno.matematicas + Alumno.informatica)/3;
}
}
Desarrollar una clase llamada Actividad1 que en su método main:
Cree e inicialice tres Asignaturas.
Cree un Alumno con las tres Asignaturas.
Cree un Profesor que le ponga calificaciones al Alumno y muestre por pantalla la media del Alumno.
public class Actividad1 {
public static void main(String[] args) {
Asignatura historia = new Asignatura();
Asignatura matematicas = new Asignatura();
Asignatura informatica = new Asignatura();
Alumno daniel = new Alumno();
Profesor arancha = new Profesor();
System.out.println("la nota de historia es:" +Alumno.historia);
System.out.println("la nota de matematicas es:" +Alumno.matematicas);
System.out.println("la nota de informatica es:" +Alumno.informatica);
System.out.println("la media es:" +Profesor.calcularMedia);
}
}
package pruebas;
public class metodo1
{
private int vacas;
private int cerdos;
public metodo1(int vacas, int cerdos)
{
this.vacas = vacas;
this.cerdos = cerdos;
}
metodo1() {
}
public int getCerdos() {
return cerdos;
}
public void setCerdos(int cerdos) {
this.cerdos = cerdos;
}
public int getVacas() {
return vacas;
}
public void setVacas(int vacas) {
this.vacas = vacas;
}
public void nVacas(int vacas)
{
System.out.println(String.format("el pastor tiene %d vacas", vacas));
}
}
package pruebas;
public class Main {
public static void main(String[] args)
{
metodo1 m1 = new metodo1();
m1.nVacas(4);
}
}
System.out.println(String.format("el pastor tiene %d vacas", vacas));
System.out.println("El pastor tiene "+vacas+" vacas");
Legebril escribió:Estoy usando Netbeans, y mi intencion es que al ejecutar el main, me salga la frase del metodo Nvacas, el problema es que me da lo siguiente:
Java Result: -1073741819
BUILD SUCCESSFUL (total time: 0 seconds)
¿A que se debe? Gracias de antemano
String CAD_FILTRO = cad_filtro;
CONSULTA="SELECT * FROM GRUPOS where NOMBRE like '"+CAD_FILTRO+"' ORDER BY NOMBRE ASC";
ResultSet rs = s.executeQuery(CONSULTA);
CONSULTA="SELECT * FROM GRUPOS where NOMBRE LIKE ? ORDER BY NOMBRE ASC";
PreparedStatement consulta = (PreparedStatement) conn.prepareStatement(CONSULTA);
consulta.setString(1, CAD_FILTRO);
ResultSet rs = s.executeQuery(CONSULTA);
[2010-12-10 02:08:20,515] 45953 [AWT-EventQueue-0] [bbdd.SelectDatosBBDD.SelectGruposCargaJCB(SelectDatosBBDD.java:122)] ERROR bbdd.SelectDatosBBDD - Hubo un problema al intentar conectarse con la base de datos jdbc:mysql://192.168.1.5/Catalogador_pre
[2010-12-10 02:08:20,515] 45953 [AWT-EventQueue-0] [bbdd.SelectDatosBBDD.SelectGruposCargaJCB(SelectDatosBBDD.java:123)] ERROR bbdd.SelectDatosBBDD - com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? ORDER BY NOMBRE ASC' at line 1
daniel_5 escribió:Todo Ok, pero no me vale ya que esto implica un obvio problema de seguridad
daniel_5 escribió:Buenas, tengo un pequeño problema al crear una sentencia de MySQL para llamarla desde un programa JAVA.
Os comento.
Si hago esto:String CAD_FILTRO = cad_filtro;
CONSULTA="SELECT * FROM GRUPOS where NOMBRE like '"+CAD_FILTRO+"' ORDER BY NOMBRE ASC";
ResultSet rs = s.executeQuery(CONSULTA);
Todo Ok, pero no me vale ya que esto implica un obvio problema de seguridad
Si hago esto:CONSULTA="SELECT * FROM GRUPOS where NOMBRE LIKE ? ORDER BY NOMBRE ASC";
PreparedStatement consulta = (PreparedStatement) conn.prepareStatement(CONSULTA);
consulta.setString(1, CAD_FILTRO);
ResultSet rs = s.executeQuery(CONSULTA);
Me da el siguiente error:[2010-12-10 02:08:20,515] 45953 [AWT-EventQueue-0] [bbdd.SelectDatosBBDD.SelectGruposCargaJCB(SelectDatosBBDD.java:122)] ERROR bbdd.SelectDatosBBDD - Hubo un problema al intentar conectarse con la base de datos jdbc:mysql://192.168.1.5/Catalogador_pre
[2010-12-10 02:08:20,515] 45953 [AWT-EventQueue-0] [bbdd.SelectDatosBBDD.SelectGruposCargaJCB(SelectDatosBBDD.java:123)] ERROR bbdd.SelectDatosBBDD - com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? ORDER BY NOMBRE ASC' at line 1
Alguna idea??
Tanke2K2 escribió:Tienes que ejecutar el PreparedStatement, no ese "s" que supongo será la conexión, sería algo como consulta.executeQuery() (no recuerdo ahora mismo la sintaxis exacta, pero seria algo parecido). tendrás que asociar tu PreparedStatement con la conexión que hayas creado.
Aqui tienes un ejemplo, es con un Update, pero bueno, no creo que tardes demasiado en adaptarlo a tu select. http://www.chuidiang.com/java/mysql/PreparedStatement-java-mysql.php
redscare escribió:daniel_5 escribió:Todo Ok, pero no me vale ya que esto implica un obvio problema de seguridad
Einch?? yo veo exactamente el mismo problema de inyección de código en ambos casos. Lo que se suele hacer es validar primero el string que te pasa el usuario para asegurarte de que no te está jodiendo. Lo típico es aplicar una expresión regular para comprobar que no haya caracteres como ";" que te pueden joder la vida.
En cuanto a por qué no te funciona lo del PreparedStatement... pues no se, yo lo veo bien . Echa un ojo a este ejemplo a ver si ves algo raro en tu código http://www.avajava.com/tutorials/lesson ... mysql.html
Tanke2K2 escribió:Tienes que ejecutar el PreparedStatement, no ese "s" que supongo será la conexión, sería algo como consulta.executeQuery() (no recuerdo ahora mismo la sintaxis exacta, pero seria algo parecido). tendrás que asociar tu PreparedStatement con la conexión que hayas creado.
Aqui tienes un ejemplo, es con un Update, pero bueno, no creo que tardes demasiado en adaptarlo a tu select. http://www.chuidiang.com/java/mysql/PreparedStatement-java-mysql.php
Statement s = conn.createStatement();
if (FILTRO == true)
{
CONSULTA="SELECT * FROM GRUPOS where NOMBRE LIKE ? ORDER BY NOMBRE ASC";
PreparedStatement consulta = (PreparedStatement) conn.prepareStatement(CONSULTA);
consulta.setString(1, CAD_FILTRO);
ResultSet rs = consulta.executeQuery();
while (rs.next())
{
GRUPO = rs.getString("NOMBRE").toString();
if (DISCO_GRUPO.equalsIgnoreCase("DISCO"))
{
InsertDiscos.JCBNombreGrupo.addItem(GRUPO);
logger.trace("Se ha añadido al JComboBox de Insertar Disco el grupo: '" + rs.getString("NOMBRE").toString()+"'");
}
else if (DISCO_GRUPO.equalsIgnoreCase("GRUPO"))
{
InsertCanciones.JCBNombreGrupo.addItem(GRUPO);
logger.trace("Se ha añadido al JComboBox de Insertar Canciones el grupo: '" + rs.getString("NOMBRE").toString()+"'");
}
}
rs.close();
}
else if (FILTRO == false)
{
CONSULTA ="SELECT * FROM GRUPOS ORDER BY NOMBRE ASC";
ResultSet rs = s.executeQuery(CONSULTA);
while (rs.next())
{
GRUPO = rs.getString("NOMBRE").toString();
if (DISCO_GRUPO.equalsIgnoreCase("DISCO"))
{
InsertDiscos.JCBNombreGrupo.addItem(GRUPO);
logger.trace("Se ha añadido al JComboBox de Insertar Disco el grupo: '" + rs.getString("NOMBRE").toString()+"'");
}
else if (DISCO_GRUPO.equalsIgnoreCase("GRUPO"))
{
InsertCanciones.JCBNombreGrupo.addItem(GRUPO);
logger.trace("Se ha añadido al JComboBox de Insertar Canciones el grupo: '" + rs.getString("NOMBRE").toString()+"'");
}
}
rs.close();
}
s.close();
conn.close();