[Hilo Oficial II] Java

SackGirl escribió:Toc toc, se puede?
Soy una total noob en programación, y para empezar desde 0 me han metido JAVA [+risas] así que, como la mayoría del tiempo no me empano de absolutamente nada y tengo que investigar por mi cuenta, daré el coñazo un poco por aqui.
La cosa esque tengo un código y no sé que quieren decir los operadores subrayados, alguien tan amable de explicarme para qué sirven de una forma que pueda enteder una novata total? [angelito]

num1=teclado.nextInt();
      for (f=0;num1>0;num1/=10,[u]f*=[/u]10)
          [u]f+=[/u]num1%10;
      System.out.println(f/10);


Me imagino que te refieres a lo que está entre las .

Quieren decir que la f toma el valor que tenga en cada momento más el valor tras el =

Es decir. Para el primer caso, la f se va incrementando en multiplos de 10 => 10, 100, 1000

El segundo, el valor de la f se suma lo que haya en la operación tras el =. Es decir si la f vale 2, y la operación de calcular el módulo de num1%10 da como resultado 5, pues la f sería 2+5. Es lo mismo que poner f = f + num1%10.

Lo que sería que el nuevo valor de la f = 2 + num1%10 -> f = 2 + 5 = 7.

No se si me he explicado bien. xD
Sip, claro como el agua, muchísimas gracias [360º]
Bueno señores he creado una clase donde escrito datos en registros de 40 bytes, y otra donde los recupero. Es de acceso aleatorio. El problema es a la hora de recuperar.Se supone que obigo a grabar 40 bytes aunque la String que devuelve el StrinfBuffer.toString sea de menor tamaño (creo que el resto se "rellena" con ceros). Pues a la hora de recuperar no se recupera ese espacio vacío y es como si no existiera, con lo que me recupera datos que pertenecería a otra String.

Código de escritura
http://pastebin.com/3gnaQ6uk


Código de Lectura
http://pastebin.com/Jf9Pi6RT


Alguno tiene idea de lo que hago mal?

paso.append(JOptionPane.showInputDialog("Introduce el nombre del jugador: "));
                paso.setLength(20);
                raf.writeChars(paso.toString());
                paso.delete(0, 20);


Hay que redimensionar cada vez que se añade una nueva String al StringBuffer, para que te grabe el bloque del tamaño que quieres, sino solo te grabará la String. De ahí mis fallos

Un saludo
Alguno de vosotros tiene el famoso "Problema del mundo de los Bloques" en java? Lo tengo en python pero me estoy haciendo la picha un lío para traducirlo.
Buenas, me ha surgido un duda rapida que es sencillita pero no veo la forma de hacerla bien. Hay alguna forma de obtener los valores de un string entre corchetes?

Por ejemplo, obtener esto : [prueba]

Solo necesito sacar lo que esta entre corchetes...

Gracias :)
elenano2 escribió:Buenas, me ha surgido un duda rapida que es sencillita pero no veo la forma de hacerla bien. Hay alguna forma de obtener los valores de un string entre corchetes?

Por ejemplo, obtener esto : [prueba]

Solo necesito sacar lo que esta entre corchetes...

Gracias :)


Elimina el primer y el último elemento usando cadena.substring() y listo.
Gracias por responder litos pero es mas complicado que eso. He planteado mal el problema, la cadena seria así: [prueba]datosdeprueba.

Es decir, detras hay texto siempre por lo que tengo que coger solo lo que hay dentro del corchete.

Gracias
elenano2 escribió:Gracias por responder litos pero es mas complicado que eso. He planteado mal el problema, la cadena seria así: [prueba]datosdeprueba.

Es decir, detras hay texto siempre por lo que tengo que coger solo lo que hay dentro del corchete.

Gracias


Pues buscas el carácter '[' y guardas las siguientes letras hasta llegar al carácter ']'
JaViNhORule escribió:Alguno de vosotros tiene el famoso "Problema del mundo de los Bloques" en java? Lo tengo en python pero me estoy haciendo la picha un lío para traducirlo.


¿Este?

System.out.println("Hazlo tu");


XDD
elenano2 escribió:Gracias por responder litos pero es mas complicado que eso. He planteado mal el problema, la cadena seria así: [prueba]datosdeprueba.

Es decir, detras hay texto siempre por lo que tengo que coger solo lo que hay dentro del corchete.

Gracias


Si quieres coger lo que hay entre el primer [ y el primer ] sólo tienes que sacar una substring usando como parámetros un par de funciones indexOf, ambas funciones métodos de String.
Buenas , vereis estoy estudiando de nuevo java, lo tenia olvidadisimo y tengo el siguiente problema
esta es la clase libro

public class Libro {
   private char [ ] titulo;
   private int numeroPaginas;
   
    private   float dimensionAlto;
   private float dimensionAncho;
   private char [ ] autor;
   private int anoEdicion;
   private String contenidoLibro;
   
   private Libro (int tipo){
      if(tipo ==1){
         this.numeroPaginas =200;
         }
         else if (tipo==2){
            this.numeroPaginas=300;
         }
   }
   public Libro(int tipo, float dimensionAltura,String contenido){
      this(tipo); //este constructor solo recibe el tipo
      this.dimensionAlto = dimensionAltura;
      this.escribir(contenido); //accedemos al metodo mediante this
      
   }   
   public void escribir (String nuevoContenido){
      //metodo publico
      this.contenidoLibro =nuevoContenido;
      formateaTexto(); //cada vez que se escriba se llamara al metodo privado formatear texto
   }
   private void formateaTexto(){
      //metodo formateara texto, solo accesible desde la propia clase
   }
   public String getContenidoLibro(){
      return contenidoLibro;
   }
   public void setContenidoLibro (String contenidoLibro){
      this.contenidoLibro = contenidoLibro;
   }
   public float getDimensionAlto(){
      return dimensionAlto;
   
   }
   public void setDimensionAlto(float dimensionAlto){
      this.dimensionAlto =dimensionAlto;
   }
   public int getNumeroPaginas(){
      return numeroPaginas;
   }
   public void setNumeroPaginas (int numeroPaginas){
      this.numeroPaginas = numeroPaginas;
   }


}

y en la siguiente clase lo unico que haria seria imprimir dos libros con los parametros que le paso, pero solo me imprime la parte del string los otros no.
Podeis decirme que hago mal.??

Aclaracion, tendria que imprimir algo del tipo, 500,60,5f y el texto pero solo imprime el texto

public class Arrays {

   
      public static void main (String [] args){
         
         Libro[] libros = new Libro[2];
         libros[0] =new Libro(1,60.5f,"texto del libro 1");
         libros[1] = new Libro(2,60.5f,"Texto del libro 2");
         
         
         for (int i=0; i < libros.length; i++){
            
            //leemos el contenido del array
            System.out.println("contenido del libro " + libros[i].getContenidoLibro());
            
         }//for
      
      }
      
      
   }



me edito: estoy bobo y hasta que no lo he escrito aqui no vi el fallo...en el system del main solo pongo que me muestre el texto...sere bobo...
Hola de nuevo compañeros EOLianos, esta vez les traigo otra duda que me surgió, tengo que hacer una especie de aplicación tipo FourSquare, pero cuando una persona hace check in en el lugar, tengo que registrar la hora en que hace el check in, (marcar un estado de que ese usuario se encuentra en un lugar y no puede hacer checkeos en otros) y al cabo de 10 minutos, el usuario "Pierde el estado de check in" y queda libre para poder hacerlo de nuevo en otro lado, pero mi duda es como puedo hacer esto? Hay alguna manera de comprarar el tiempo? o como puedo obtenerlo (es tiempo del sistema) así mismo, para registrar un nuevo lugar se debe registar a que hora abre y cierra, quiero usar un JSpinner, pero no saben si hay alguna forma de hacerlo personalizado es decir, un JSpinner que me marque opciones como 07:00 - 07:15 - 07:30 y así hasta que se cumplan 24 horas, para que el usuario solo seleccione una y ya pueda guardarla en los datos de ese lugar

Muchas gracias por su ayuda! :3
tom_deluxe escribió:
elenano2 escribió:Gracias por responder litos pero es mas complicado que eso. He planteado mal el problema, la cadena seria así: [prueba]datosdeprueba.

Es decir, detras hay texto siempre por lo que tengo que coger solo lo que hay dentro del corchete.

Gracias


Pues buscas el carácter '[' y guardas las siguientes letras hasta llegar al carácter ']'
amuchamu escribió:
elenano2 escribió:Gracias por responder litos pero es mas complicado que eso. He planteado mal el problema, la cadena seria así: [prueba]datosdeprueba.

Es decir, detras hay texto siempre por lo que tengo que coger solo lo que hay dentro del corchete.

Gracias





Si quieres coger lo que hay entre el primer [ y el primer ] sólo tienes que sacar una substring usando como parámetros un par de funciones indexOf, ambas funciones métodos de String.



Muchas gracias a los dos, ya esta hecho :)

EDIT:

Por cierto, estoy intentando una cosilla que a ver si la habéis hecho alguno por si me podéis ayudar. Necesito generar jtextfield para poder posicionarlos por la ventana como yo quiera,pero no se de que forma puedo generar un jtexfield que se "asocie" al cursor del raton y lo pueda mover por la pantalla para posicionarlo...

A ver si alguno sabe como hacerlo porque llevo varias horas ahi...y no doy con ello :S

Gracias de antemano
Amigos, me podrían decir, porfavor, como se define la ruta de un archivo para linux y para windows?

Lo que pasa es que si es un proyecto pongo, por ejemplo RandomAccessFile("Users.txt", "r")
lo lee sin mayor problema con tal de que el archivo esté en el mismo directorio que mi .java, el problema es que si yo quiero crear, por ejemplo,
una carpeta en el mismo lugar que se llame Database y dentro el archivo Users.txt, si yo trato con RandomAccessFile("\\Database\\Users.txt", "r"), me marca IOException por no poder encontrar el archivo, no se supone que debería poder accesar así?
También supe que hay ciertos tipos de diferencias entre windows y linux con "/" y "\", y tengo que entregar un pequeño proyecto con ambas versiones, creen poder ayudarme?

Saludos de antemano y gracias.
josealejandro escribió:Amigos, me podrían decir, porfavor, como se define la ruta de un archivo para linux y para windows?

Lo que pasa es que si es un proyecto pongo, por ejemplo RandomAccessFile("Users.txt", "r")
lo lee sin mayor problema con tal de que el archivo esté en el mismo directorio que mi .java, el problema es que si yo quiero crear, por ejemplo,
una carpeta en el mismo lugar que se llame Database y dentro el archivo Users.txt, si yo trato con RandomAccessFile("\\Database\\Users.txt", "r"), me marca IOException por no poder encontrar el archivo, no se supone que debería poder accesar así?
También supe que hay ciertos tipos de diferencias entre windows y linux con "/" y "\", y tengo que entregar un pequeño proyecto con ambas versiones, creen poder ayudarme?

Saludos de antemano y gracias.


http://docs.oracle.com/javase/tutorial/ ... sprop.html
Hola compañeros, necesito vuestra ayuda de nuevo. Estoy liado con el drag and drop en java pero por mas que busco no encuentro un sitio donde lo expliquen bien.

Estoy buscando ejemplos de drag and drop entre dos ventanas pero no doy con ello...si alguien lo ha utilizado alguna vez o sabe de alguna pagina donde lo expliquen se lo agradecería.


Gracias
Hola primero de todo.
Ha ver si me podeis ayudar a resolver esta duda.
Estoy comenzando en java y se me pide que una vez que muestre en pantalla la orden esta System.out.println("Esperando orden:");
El usuario escriba por ejemplo Cliente y pueda poner los datos de el cliente.
O si escribo Musica Pueda escribir la información referente a musica.
Yo se ya ponerla de forma escalonada pero no se poder elegir las ordenes e ir a esa orden concreta.
Tengo que ponerlo en consola nada de ventanas.
Utilizo eclipse.
Gracias de antemano
Buenas, estoy haciendo un proyecto personal con spring+jsf+jpa+hibernate y por estoy en el comienzo. Tengo una duda y es como puedo solventar esta excepción.De hecho aun con este error ahora mismo funciona, bueno solo listo unos usuarios e inserto unos en la BD.

SEVERE: IOException al cargar sesiones persistidas: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: negocio.GestorUsuarios
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: negocio.GestorUsuarios
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
   at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
   at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
   at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
   at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
   at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1595)
   at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1060)
   at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:284)
   at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
   at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
   at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
   at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5294)
   at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
   at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
   at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
   at java.util.concurrent.FutureTask.run(FutureTask.java:166)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
   at java.lang.Thread.run(Thread.java:722)


La clase GestorUsuarios esta así:
package negocio;






import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;


import org.springframework.context.annotation.Scope;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import modelo.Usuario;

import persistencia.UsuarioDao;

@Named
//@Service
@Scope("session")
public class GestorUsuarios{
   
   
   

   
   @Inject private UsuarioDao usuarioDao;
   @Inject private Usuario usuario;
   
   
   public List<Usuario> listar(){
      Usuario u = this.infoUsuario("xxxxxx");
      Usuario u2 = new Usuario();
      u2.setNombre("Maria");
      u2.setApellidos("Garcia");
      List<Usuario> detalles = new ArrayList<Usuario>();
      detalles.add(u);
      detalles.add(u2);
      return detalles;
   }
   
   @Transactional(propagation=Propagation.REQUIRED)
   public void insertar(){
      usuarioDao.insertar(usuario);
   }
   
   public Usuario infoUsuario(String email){
      Usuario  u = usuarioDao.buscar(email);
      return u;
   
   }

   
   public void setUsuarioDao(UsuarioDao usuarioDao) {
      this.usuarioDao = usuarioDao;
   }
   
   public Usuario getUsuario() {
      return usuario;
   }

   public void setUsuario(Usuario usuario) {
      this.usuario = usuario;
   }

   public UsuarioDao getUsuarioDao() {
      return usuarioDao;
   }

}


He probado a que la clase implemente la interfaz serializable, pero me da otro fallo y no funciona la aplicación, puesto que no puede crear el EntityManager de JPA. Bueno la clase hereda de :

AbstractJPATemplateDao.java
package persistencia;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public abstract class AbstractJPATemplateDao<T,k extends Serializable> {

   @PersistenceContext(unitName="mysqlPU")
   private EntityManager em;    
   
   private Class<T> tipo = (Class<T>)
                     ((ParameterizedType)                           
                     getClass().getGenericSuperclass()).getActualTypeArguments()[0];
   

   public void insertar(T obj){
      //obj = em.merge(obj);
      em.persist(obj);
   }
   
   public void modificar(T obj){
      em.merge(obj);
   }

   public void borrar(T obj){
      obj = em.merge(obj);
      em.remove(obj);
   }   
   
   public T buscar(k id){
      return em.find(tipo, id);
   }
   
   @SuppressWarnings("unchecked")
   public List<T> listarTodos(){
      return em.createQuery("select o from "+tipo.getName()+" o").getResultList();
   }   
   
}




He implementa la interfaz: InterfaceDao.java

package persistencia;

import java.io.Serializable;
import java.util.List;

public interface InterfaceDao<T, k extends Serializable> {

   void insertar(T obj);
   void modificar(T obj);
   void borrar(T obj);
   T buscar(k id);
   List<T> listarTodos();
   
}



UsuarioDao.java
package persistencia;
import modelo.Usuario;
public interface UsuarioDao extends InterfaceDao<Usuario, String>{
}



UsuarioDaoHibernate.java

package persistencia;
import org.springframework.stereotype.Repository;
import modelo.Usuario;
@Repository
public class UsuarioDaoHibernate extends AbstractJPATemplateDao<Usuario, String> implements UsuarioDao {
}


¿Como puedo solucionarlo?
Este programa se supone que se le pasa por pantalla el numero de productores y consumidores,y todo esto se controla con semaforos ,pero no funciona consume de mas ,por tanto intenta acceder ala posición -1 del vector buffer.
package prodconmultiple;

import java.util.Scanner;
import java.util.concurrent.Semaphore;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author alvaro
*/
public class ProdConMultiple extends Thread{
    static Semaphore semProd;//demaforo de los productores
    static Semaphore semCon;//demafotro de lso consumidores
    static Semaphore em;//este semafoto es pala accede en exclusion mutua
    static int pos=0;
    static int []buffer;
    int tipo;
   
    public ProdConMultiple(int tipo){
        this.tipo=tipo;
    }
   
    public void run(){
        if(tipo==0){
            while(true){
                try {
                    semProd.acquire();
                    em.acquire();
                } catch (InterruptedException ex) {
                    Logger.getLogger(ProdConMultiple.class.getName()).log(Level.SEVERE, null, ex);
                }
                buffer[pos]=(int)Math.random();
                pos++;
                System.out.println("pos++"+pos);
                System.out.println(currentThread().getName()+" Produjo");
                em.release();
                semCon.release();
            }
        }
        else if(tipo==1){
            try {
                semCon.acquire();
                em.acquire();
            } catch (InterruptedException ex) {
                Logger.getLogger(ProdConMultiple.class.getName()).log(Level.SEVERE, null, ex);
            }
            int consum=buffer[pos];
            pos--;
            System.out.println("pos--"+pos);
            System.out.println(currentThread().getName()+" consumio");
            em.release();
            semProd.release();
        }
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        em=new Semaphore(1);
        int n,m;
        Scanner sc=new Scanner(System.in);
        ProdConMultiple [] productores;
        ProdConMultiple [] consumidores;
       
        System.out.println("Introduzca el numero de productores");
        n=sc.nextInt();
        buffer=new int[n];
        productores=new ProdConMultiple[n];
       
        System.out.println("Introduzca el numero de consumidores");
        m=sc.nextInt();
        consumidores=new ProdConMultiple[n];
       
        semProd=new Semaphore(n);
        semCon=new Semaphore(1);
       
        for(int i=0;i<n;i++){
            productores[i]=new ProdConMultiple(0);
        }
        for(int i=0;i<m;i++){
            consumidores[i]=new ProdConMultiple(1);
        }
       
        for(int i=0;i<n;i++){
            productores[i].start();
        }
        for(int i=0;i<m;i++){
            consumidores[i].start();
        }
       
    }
}
Hola compañeros, feliz navidad antes de todo!!

Estoy con unas pruebas usando el jtree y me viene un problema que no se si puede hacerse, he buscado por internet pero no lo encuentro.

Mi programa agrega los nodos al jtree automaticamente, pero luego quiero agregar mas datos a esos nodos y no se como puedo buscar ese nodo por "nombre".

Si se crea el nodo a mano y se le pone nombre, es fácil agregarlo pero si se necesita agregar por nombre no encuentro como hacerlo.

Alguien lo ha hecho antes?

Un saludo
¡Buenas!

Una duda que tengo en JAVA.

He hecho una clase, pongamos de nombre AUTO. Y ahora quiero hacer en el main (otro archivo .java distinto a donde tengo la clase), una lista que contenga varios objetos de la clase AUTO.

Bien, tengo lo siguiente:

//Creo una lista para meter los objetos
List<AUTO> lista = new ArrayList<AUTO>();


// Creo un objeto llamado nombre, de la clase AUTO. (Crearía unos cuantos)
AUTO nombre = new AUTO();

//Y ahora los meto en la lista
lista.add(nombre);  <--- Esto me da error!!!



El error es el siguiente: "non-static variable lista cannot be referenced from a static context"



¿Cual es el problema?


EDITO: Vale, si declaro la lista como "static" si me funciona...Pero no entiendo por qué pasa esto..???
dandorf escribió:¡Buenas!
Una duda que tengo en JAVA.
He hecho una clase, pongamos de nombre AUTO. Y ahora quiero hacer en el main (otro archivo .java distinto a donde tengo la clase), una lista que contenga varios objetos de la clase AUTO.
Bien, tengo lo siguiente:
//Creo una lista para meter los objetos
List<AUTO> lista = new ArrayList<AUTO>();
// Creo un objeto llamado nombre, de la clase AUTO. (Crearía unos cuantos)
AUTO nombre = new AUTO();
//Y ahora los meto en la lista
lista.add(nombre);  <--- Esto me da error!!!

El error es el siguiente: "non-static variable lista cannot be referenced from a static context"
¿Cual es el problema?
EDITO: Vale, si declaro la lista como "static" si me funciona...Pero no entiendo por qué pasa esto..???


intenta poner todo el codigo, sino dificilmente te podremos ayudar.
de todas formas, supongo que la lista la creas fuera del metodo main, ¿verdad?
por eso da el error, desde un metodo estatico como es el main, no puedes llamar a un atributo no estatico como es la lista.
si en vez de declarar la lista como static la declaras dentro del main tambien debe de funcionar
dandorf escribió:¡Buenas!
EDITO: Vale, si declaro la lista como "static" si me funciona...Pero no entiendo por qué pasa esto..???


Como bien te dicen, habría que ver el código al completo para ver el contexto.

Muy a grandes rasgos, un método estático como el Main() no puedo acceder a un método/atributo no estático sin realizar la instanciacion previa de las clase:

Ejemplo:

public class Pepito{

public List<String> nombreAmigosList = new ArrayList<String>();

   public static void main(String[] args){
     String amigoPepito = "Juanito";

     //Error
     nombreAmigosList.add(amigoPepito);

     //Bueno
     Pepito pepito = new Pepito()
     pepito.nombreAmigosList.add(amigoPepito)
   }
}
He echo un pequeño ejemplo con wait y notifyall pero se me queda bloqueado en el primer hilo ,si la variable turno es comun a todos porque cuando cambio el valor de turno a 2 no se despierta el hilo dos??
este es el main
public class Sincronizacion {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws InterruptedException {
       int turno =1;
       Object cerrojo=new Object();
       
       S1 s1=new S1(turno,cerrojo);
       S2 s2=new S2(turno,cerrojo);
       S3 s3=new S3(turno,cerrojo);
       s1.start();
       s2.start();
       s3.start();
       s1.join();
       s2.join();
       s3.join();
    }
}


este el hilo 1
public class S1 extends Thread{
   
    int turno;
    Object cerrojo;
   
    @Override
    public void run(){
        synchronized(cerrojo){//aqui sale un warning diciendo "Sincronizacion en campo que no es final"
            while(turno!=1){
                try {
                    cerrojo.wait();
                } catch (Exception e) {
                }
            }
            System.out.println("S1 ha despertado");
            turno=2;
            cerrojo.notifyAll();
        }
    }
    public S1(int turno,Object cerrojo){
        this.turno=turno;
        this.cerrojo=cerrojo;
    }
   
}


el hilo 2
public class S2 extends Thread{
   
    int turno;
    Object cerrojo;
   
    @Override
    public void run(){
        synchronized(cerrojo){
            while(turno!=2){
                try {
                    cerrojo.wait();
                } catch (Exception e) {
                }
            }
            System.out.println("S2 ha despertado");
            turno=3;
            cerrojo.notifyAll();
        }
    }
    public S2(int turno,Object cerrojo){
        this.turno=turno;
        this.cerrojo=cerrojo;
    }
   
}


y el 3
public class S3 extends Thread{
   
    int turno;
    Object cerrojo;
   
    @Override
    public void run(){
        synchronized(cerrojo){
            while(turno!=3){
                try {
                   cerrojo.wait();
                } catch (Exception e) {
                }
            }
            System.out.println("S3 ha despertado");
             cerrojo.notifyAll();
        }
    }
    public S3(int turno,Object cerrojo){
        this.turno=turno;
        this.cerrojo=cerrojo;
    }
   
}
Hola haber si me echais ina manita por que no se ya como hacerlo.
Lo primero quiero un programa para seleccionar unas opciones, eso facil utilizo los case y va pero cuando pongo por ejemplo
do{
               System.out.println("Elija una opcion:");
               System.out.println("Pulse 2 para salir");
               System.out.println("Pulse 1 para Introducir el nombre del cliente");
            opcion=teclado.nextInt();
            switch(opcion) {
              case 1:
                  System.out.println ("Introduzca el Nombre del cliente:");
                  cliente.setNombre (teclado.nextLine());
                 
                 
                     
                 
                 
                  cliente.setNombre(teclado.nextLine());
                  
                  Opcion=true;
                  System.out.println("Introduzca uno de los formatos siguentes:");
                  System.out.println("Pulse 1 para vinilo");
                  System.out.println("Pulse 2 para CD");
                  System.out.println("pulse 3 para cassete");
                  articulo=teclado.nextInt();
                  
            
             
                 
                 
             
              case 2:
                  System.out.println ("Gracias por utilizar la aplicación");
              break;
             
          }
                 
      
            }while (opcion != 0);

hasta hay bien vale pero ahora biene el problema, dentro del case 1:
querria poner las opciones expuestas pero no se como, por que si pongo otros case se mezclan y no sale lo que uno quiere.
Y la segunda pregunta seria quiero guardar el nombre del cliente y lo que se lleva utilizaba este codigo pero cuando lo pongo ya empiezan los problemas con while y no lo guarda por que el codigo lo repite hasta el infinito.
try{ String lineaArchivo;
             String fuenteArchivo=cliente.getNombre();
             BufferedReader fuenteSalida;

             fuenteSalida = new BufferedReader(

             new StringReader(fuenteArchivo));



             // Se define un stream de salida (PrintWriter)

             // que tomara los datos de memoria (BufferedWriter)

             // y los escribira en un archivo (FileWriter)

             PrintWriter archivoSalida;

             archivoSalida = new PrintWriter(

             new BufferedWriter(

             new FileWriter("C:Tienda.txt")));


             while ((lineaArchivo = fuenteSalida.readLine()) != null)

             archivoSalida.println(1 + ": " + lineaArchivo );



             // Se cierra el stream de salida

             archivoSalida.close(); }
             catch (IOException e) {

             System.out.println("Excepcion Entrada/Salida");

          }
            }
   }

Me gustaria que me orientarais un poco por favor por que estoy empezando en el mundillo de la programación y no me aclaro nada :(
deivor

Si haces un case y no lo terminas con un break, va a entrar al segundo case. Yo cuando hago un switch, lo primero que hago es poner los case y los break, sin meter código ninguno:


switch(variable) {
          case 1:
                      break;
          case 2:
                      break;
//Los cases que hagan falta

}


Después es cuando meto el código en cada case, te digo yo que es mano de santo, no me falla nunca [oki]
Gracias utilizares ese metodo.
Pero hay alguna forma de utilizar dentro de un case otro o tengo que utilizar primero un if y luego else.
Y para el tema de guardar la información en un fichero de texto sirve asin como lo expongo
A ver, dentro de un switch pones código de la misma forma que lo pondrías fuera, puedes poner un switch y dentro de uno de sus cases hacer otro switch con sus cases correspondientes... Pero la cuestión es si merece la pena, yo nunca he tenido que hacer algo así (y llevo casi 6 años programando Java), siempre encuentras una forma más elegante y además más efectiva
Muchas gracias por responder.
Bueno supongo que para lo que quiero hacer abria una forma más elegante y no tan chapucera pero al haber tantos conceptos y tantas formas tan variadas pues... No se me ocurria ninguna.
Gracias de nuevo :)
Hola, lo primero gracias por la ayuda del otro dia.
Me ha servido mucho, pero ya tengo casi teminado mi programa y bueno utilice al principio un if para que tirara ha cliente y o elfe para salir.
Pero cuando salgo me salta esta excepción java.lang.NullPointerException, y no se por que me sale.
Mira este es el codigo
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.StringReader;
import java.util.InputMismatchException;

//Importo las utilidades de java a utilizar
public class Principal {
//Pongo las Variables que voy a utilizar para leer y escribir los archivos
   private static Scanner teclado;
   

public Principal (String Inventario){
   
   
}

   public static void main(String[] args ) {
      teclado = new Scanner(System.in);
      int opcion;
      
      
      
      
      Cliente cliente=new Cliente();
      
      Vinilo disco=new Vinilo();
      
      int vinilocopy = 0;
      
      
      
            //Pido a el dependiente que introduczca una opción
            System.out.println("Escriba cliente para continuar");
            System.out.println("Escriba Salir para terminar la aplicación");
            String confirmar =teclado.nextLine();
            
            
            if(confirmar.equalsIgnoreCase("cliente")){
            
            //Capturo el nombre del cliente para luego guardarlo
                  System.out.println ("Introduzca el Nombre del cliente:");
                  cliente.setNombre (teclado.nextLine());
                 
                 
                     
                 
                 
                  
               //Creo un Case para que seleccione el tipo de formato de venta que va a vender   
                  do{
                  System.out.println("Introduzca uno de los formatos siguentes:");
                  System.out.println("Pulse 1 para vinilo");
                  System.out.println("Pulse 2 para CD");
                  System.out.println("pulse 3 para cassete");
                  opcion=teclado.nextInt();
                  
                     switch(opcion){
                     
                     case 1:
                        System.out.println("Vinilo");
                        System.out.println("Introduzca el nombre del autor");
                        
                        Vinilo.setautor(teclado.nextLine());
                        
                        System.out.println("Introduzca el titulo");
                        
                        disco.setTitulo(teclado.nextLine());
                        break;
                     case 2:
                        System.out.println("CD");
                        break;
                     case 3:
                        System.out.println("cassete");
                        break;
                        
                           
                     default:
                           System.out.println("Opcion no reconocida");
                           System.out.println("Introducza una de las opciones disponibles:");
                           //Si no pone una de las 3 opciones creo un bucle para que se repita la pregunta
                        }
                     }while(opcion >= 4);
                  
                 
                 
            }else {
               System.out.println("Gracias por utilizar la aplicacion");
               
            }
                 
                 
             
             
            
         
                 
      
            
                  
            
               
            
            
            
            
            
            try{ String lineaArchivo;
             String fuenteArchivo=cliente.getNombre();
             BufferedReader fuenteSalida;
             String fuentevinilo=Vinilo.getAutor();
             fuenteSalida = new BufferedReader(

             new StringReader(fuenteArchivo));



             // Se define un stream de salida (PrintWriter)

             // que tomara los datos de memoria (BufferedWriter)

             // y los escribira en un archivo (FileWriter)

             PrintWriter archivoSalida;

             archivoSalida = new PrintWriter(

             new BufferedWriter(

             new FileWriter("C:Tienda.txt")));


             while ((lineaArchivo = fuenteSalida.readLine()) != null)

             archivoSalida.println(1 + ": " + lineaArchivo );
             archivoSalida.println(2+ ":"+fuentevinilo);


             // Se cierra el stream de salida

             archivoSalida.close(); }
             catch (IOException e) {

             System.out.println("Excepcion Entrada/Salida");
            
          }
            }
   }



   



Haber si me decis el por que, es que no veo el error por ningun lado, y solo quiero que si le doy a salir pues salga y ya sin problemas.
Hola necesito ayuda urgente, no se como hacerlo y aunque busco por internet no encuentro nada.
Lo primero de todo estoy cursando un curso on-line en EXITAE pero al ser online toda la información es por libro y actividad, entonces he llegado hasta el proyecto final y al no haber echo java en mi vida pues lo he suspendido por no dar en el proyecto lo que se me pedia.
Las instrucciones posibles son: &#61552; crear "cliente"|"musica"|"venta" listar "cliente"|"musica"|"venta" eliminar "cliente"|"musica"|"venta [codigo]".
Yo repito lo he intentado todo he buscado todo pero al no tener claro los conceptos no lo he echo de forma correcta.
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.StringReader;
import java.util.InputMismatchException;

//Importo las utilidades de java a utilizar
public class Principal {
//Pongo las Variables que voy a utilizar para leer y escribir los archivos
   private static Scanner teclado;
   

public Principal (String Inventario){
   
   
}

   public static void main(String[] args ) {
      teclado = new Scanner(System.in);
      
      String formato=(equalsIgnoreCase("vinilo"));
      //Pido a el dependiente que introduczca una opción
      String Respuesta=(equalsIgnoreCase("cliente"));
      System.out.println("Esperando orden:");
      System.out.println("Crear cliente");
      System.out.println("Listar cliente");
      System.out.println("Eliminar cliente");
      System.out.println("Cerrar");
      Respuesta=teclado.nextLine();
      //creo las posibles respuestas del dependiente
      
      if (Respuesta.equalsIgnoreCase("CREAR cliente")){
         //Capturo el nombre del cliente para luego guardarlo
         System.out.println("Introduzca el nombre del cliente:");
         Cliente.setNombre(teclado.nextLine());
         System.out.println("Introduzca el formato de musica");
         formato=teclado.nextLine();
         
      }else if(Respuesta.equalsIgnoreCase("Listar cliente")){
         //Capturo el nombre del cliente para luego guardarlo
         System.out.println("Introduzca el nombre del cliente:");
         Cliente.setNombre(teclado.nextLine());
         System.out.println("introduzca el formato de musica");
         formato=teclado.nextLine();
         
      }else if(Respuesta.equalsIgnoreCase("eliminar cliente")){
         System.out.println("introduzca el nombre del cliente a eliminar:");
         Cliente.setNombre(teclado.nextLine());
         
         System.out.println("El cliente: "+Cliente.getNombre()+" ha sido eliminado con exito");
         
      }else if(formato.equalsIgnoreCase("vinilo")){
         System.out.println("Introduzca el titulo de la obra:");
         Vinilo.setTitulo(teclado.nextLine());
         System.out.println("Introduzca el autor de la obra:");
         Vinilo.setautor(teclado.nextLine());
         
      }else if(formato.equalsIgnoreCase("CD")){
         System.out.println("Introduzca el nombre del autor");
         CD.setautor(teclado.nextLine());
         System.out.println("Introduzca el titulo del CD");
         CD.settitulo(teclado.nextLine());
         
      }else if(formato.equalsIgnoreCase("cassete")){
         System.out.println("Introduzca el nombre del autor");
            cassete.setautor(teclado.nextLine());
            System.out.println("Introduzca el titulo del cassete");
            cassete.setTitulo(teclado.nextLine());
            
      }else if(Respuesta.equalsIgnoreCase("cerrar")){
         System.out.println("Gracias por utilizar la aplicación");
      
   }else{
   System.out.println("Opcion no valida");
   Respuesta=teclado.nextLine();
   }
   

Si me dierais una orientacion en plan mira utiliza tal ya seria el HOmbre más feliz, no quiero volver a suspenderlo por no enterarme del ejercicio.
Para mi java actualmente me parece un puzle pero sin información del montaje y aunque le pregunte a los profesores estos ni se inmutan.
Por favor una ayudita [buuuaaaa] [buuuaaaa]
Edito:
Eh cambiado el codigo que se ve por uno un poco más simple pero sigo igual aunque ahora creo que queda mejor y solo tengo la duda de que si escribo esos if else del codigo y entro en uno y luego quiero ir digamos que a vinilo ¿hay forma de hacerlo? :-?
POr favor estoy muy perdido y tengo que entregarlo de nuevo el viernes,Aunque sea unos consejos o algo [agggtt] [agggtt]
deivor escribió:Hola, lo primero gracias por la ayuda del otro dia.
Me ha servido mucho, pero ya tengo casi teminado mi programa y bueno utilice al principio un if para que tirara ha cliente y o elfe para salir.
Pero cuando salgo me salta esta excepción java.lang.NullPointerException, y no se por que me sale.
Mira este es el codigo
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.StringReader;
import java.util.InputMismatchException;

//Importo las utilidades de java a utilizar
public class Principal {
//Pongo las Variables que voy a utilizar para leer y escribir los archivos
   private static Scanner teclado;
   

public Principal (String Inventario){
   
   
}

   public static void main(String[] args ) {
      teclado = new Scanner(System.in);
      int opcion;
      
      
      
      
      Cliente cliente=new Cliente();
      
      Vinilo disco=new Vinilo();
      
      int vinilocopy = 0;
      
      
      
            //Pido a el dependiente que introduczca una opción
            System.out.println("Escriba cliente para continuar");
            System.out.println("Escriba Salir para terminar la aplicación");
            String confirmar =teclado.nextLine();
            
            
            if(confirmar.equalsIgnoreCase("cliente")){
            
            //Capturo el nombre del cliente para luego guardarlo
                  System.out.println ("Introduzca el Nombre del cliente:");
                  cliente.setNombre (teclado.nextLine());
                 
                 
                     
                 
                 
                  
               //Creo un Case para que seleccione el tipo de formato de venta que va a vender   
                  do{
                  System.out.println("Introduzca uno de los formatos siguentes:");
                  System.out.println("Pulse 1 para vinilo");
                  System.out.println("Pulse 2 para CD");
                  System.out.println("pulse 3 para cassete");
                  opcion=teclado.nextInt();
                  
                     switch(opcion){
                     
                     case 1:
                        System.out.println("Vinilo");
                        System.out.println("Introduzca el nombre del autor");
                        
                        Vinilo.setautor(teclado.nextLine());
                        
                        System.out.println("Introduzca el titulo");
                        
                        disco.setTitulo(teclado.nextLine());
                        break;
                     case 2:
                        System.out.println("CD");
                        break;
                     case 3:
                        System.out.println("cassete");
                        break;
                        
                           
                     default:
                           System.out.println("Opcion no reconocida");
                           System.out.println("Introducza una de las opciones disponibles:");
                           //Si no pone una de las 3 opciones creo un bucle para que se repita la pregunta
                        }
                     }while(opcion >= 4);
                  
                 
                 
            }else {
               System.out.println("Gracias por utilizar la aplicacion");
               
            }
                 
                 
             
             
            
         
                 
      
            
                  
            
               
            
            
            
            
            
            try{ String lineaArchivo;
             String fuenteArchivo=cliente.getNombre();
             BufferedReader fuenteSalida;
             String fuentevinilo=Vinilo.getAutor();
             fuenteSalida = new BufferedReader(

             new StringReader(fuenteArchivo));



             // Se define un stream de salida (PrintWriter)

             // que tomara los datos de memoria (BufferedWriter)

             // y los escribira en un archivo (FileWriter)

             PrintWriter archivoSalida;

             archivoSalida = new PrintWriter(

             new BufferedWriter(

             new FileWriter("C:Tienda.txt")));


             while ((lineaArchivo = fuenteSalida.readLine()) != null)

             archivoSalida.println(1 + ": " + lineaArchivo );
             archivoSalida.println(2+ ":"+fuentevinilo);


             // Se cierra el stream de salida

             archivoSalida.close(); }
             catch (IOException e) {

             System.out.println("Excepcion Entrada/Salida");
            
          }
            }
   }



   



Haber si me decis el por que, es que no veo el error por ningun lado, y solo quiero que si le doy a salir pues salga y ya sin problemas.


El nullpointer salta cuando accedes a una propiedad de un objeto y este objeto vale null. A simple vista veo que el fallo puede estar aquí

Vinilo.setautor(teclado.nextLine());


tendría que ser

disco.setautor(teclado.nextLine());
zaius5 escribió:He echo un pequeño ejemplo con wait y notifyall pero se me queda bloqueado en el primer hilo ,si la variable turno es comun a todos porque cuando cambio el valor de turno a 2 no se despierta el hilo dos??
este es el main


Hola, he hecho un pequeño ejemplo de productores consumidores....

Main.java

/**
*
* @author Demon
*/
public class Main {
   
    public static void main(String[] args) {
        new Main();
    }
   
    public Main(){
        Lista lista = new Lista();
        Consumidor con1 = new Consumidor(lista , "Con1");       
        Consumidor con2 = new Consumidor(lista , "Con2");
        Productor prod1 = new Productor(lista, "Prod1");       
        Productor prod2 = new Productor(lista, "Prod2");       
        Productor prod3 = new Productor(lista, "Prod3");
        Thread t1 = new Thread(con1);
        Thread t2 = new Thread(con2);
        Thread t3 = new Thread(prod1);       
        Thread t4 = new Thread(prod2);       
        Thread t5 = new Thread(prod3);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
    }
}


Lista.java

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Lista {

    private ArrayList<Integer> lista;

    public Lista() {
        lista = new ArrayList();
    }

    public synchronized Integer addDato(Integer data) {
        lista.add(data);
        notify();
        return data;
    }

    public synchronized Integer getDato() {
        try {
            while (lista.isEmpty()) {
                wait();
            }
            Integer data = lista.remove(0);
            return data;
        } catch (InterruptedException ex) {
            Logger.getLogger(Lista.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}


Productor.java
import java.util.Random;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Demon
*/
public class Productor implements Runnable {

    private String name;
    private Lista lista;
    private Random r;

    public Productor(Lista comun, String name) {
        this.name = name;
        this.lista = comun;
        r = new Random();
    }

    @Override
    public void run() {
        while (true) {
            System.out.println("Productor " + name + " inserta: " + lista.addDato(new Integer(r.nextInt())));
        }
    }
}


Consumidor.java
/**
*
* @author Demon
*/
public class Consumidor implements Runnable{
   
    private String name;
    private Lista lista;
   
    public Consumidor(Lista comun,String name){
        this.name = name;
        this.lista = comun;
    }

    @Override
    public void run() {
        while(true){
            System.out.println("Consumidor "+name+" lee: "+lista.getDato());
        }
    } 
}
(mensaje borrado)
Hola para que un do-whilw salte con un string.
en plan
do{
if(condiciones){
}else if(Respuesta.equalsIgnoreCase(Juan)){
}else if(Respuesta.equalsIgnoreCase(pepe)){
}else{
Systen.out.println("Nombre no reconocido")
}
}while(Aqui es lo que no se poner)
Suelo poner }while(!Respuesta.equalsIgnoreCase(Juan)&&(pepe))
Pero sale que respuesta es incorrecto. :(
Ha ver si me lo podeis decir que tengo que poner
Respuesta.equalsIgnoreCase(Juan)&&(pepe)
Es que esta función no tiene sentido como la has puesto. Su forma correcta es: equalsIgnoreCase(String anotherString)
Y veo que no tiene nada más sobrecargado.
Puedes poner !Respuesta.equalsIgnoreCase(Juan)&&!Respuesta.equalsIgnoreCase(Pepe)

http://docs.oracle.com/javase/1.4.2/doc ... tring.html
Acermax escribió:Respuesta.equalsIgnoreCase(Juan)&&(pepe)
Es que esta función no tiene sentido como la has puesto. Su forma correcta es: equalsIgnoreCase(String anotherString)
Y veo que no tiene nada más sobrecargado.
Puedes poner !Respuesta.equalsIgnoreCase(Juan)&&!Respuesta.equalsIgnoreCase(Pepe)

http://docs.oracle.com/javase/1.4.2/doc ... tring.html

Si ya se que se ponia asin lo siento, pero lo que me pasa es que cuando lo pongo asín !Respuesta.equalsIgnoreCase(Juan)&&!Respuesta.equalsIgnoreCase(Pepe);
Pero según eclipse tengo que crear o un parametro o una clase.
Pero se supone que poniendo:
String Respuesta;
ya deberia servir o tengo que ponerlo de forma especial.
Yo como me ponia que tenia que iniciar la variable pongo
String Repuesta=equalsIgnoreCase("pepe");
Para que tenga ya algo dentro del objeto.
Lo siento por ser tan pesado pero no me aclaro con la programación. :(
Esto no tiene ningún sentido:
String Repuesta=equalsIgnoreCase("pepe");


equalsIgnoreCase es un método de comparación y ahí lo que tienes que hacer es asignarle un valor a la variable Respuesta.
Por ejemplo:
String Repuesta= "Pepe";

que entiendo que es lo querias hacer.
El programa multiplica todos los elementos de una matriz por2,la cuestin es que en elservidor hago un sistem.out para ver el resultado y me sale la matriz ya multiplicada por por pero en el cliente la matriz no ha cambiado y no tengo ni idea de cual es el problema :o si es la misma..

el servidor
import java.rmi.RemoteException;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
import java.rmi.Naming;


public class SMatriz extends UnicastRemoteObject implements iMatriz{
    public SMatriz()throws Exception{
        super();
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception{
       SMatriz obj1=new SMatriz();
       Naming.bind("Servidor1", obj1);
       SMatriz obj2=new SMatriz();
       Naming.bind("Servidor2", obj2);
       SMatriz obj3=new SMatriz();
       Naming.bind("Servidor3", obj3);
       SMatriz obj4=new SMatriz();
       Naming.bind("Servidor4", obj4);
       System.out.println("Servidores Remotos Preparados");
    }

    @Override
    public void escalar(int liminf, int limsup,int mat[][]) throws RemoteException {
        for(int i=liminf;i<limsup;i++){
            for(int j=0;j<mat[0].length;j++){
                mat[i][j]=mat[i][j]*2;
            System.out.print(mat[i][j]); //aqui sale la matriz ya multiplicada
            }
         System.out.println();
        }
      System.out.println();
    }
}


Y el cliente

import java.rmi.*;
import java.rmi.registry.*;
import java.util.Random;
import java.util.Scanner;

public class CMatriz {
   
    public static void main(String []args) throws Exception{
      Scanner sc=new Scanner(System.in);
      System.out.println("Introduzca el numero de filas y columnas de la matriz");
      int f=sc.nextInt();
      int intervalo=f/4;
      int inf=0;
      int sup=intervalo;
        int mat[][]=new int[f][f];
       
        for(int i=0;i<mat.length;i++){
            for(int j=0;j<mat.length;j++){
                mat[i][j]=new Random().nextInt(10)+1;
            }
        }
       
        for(int i=0;i<mat.length;i++){
            for(int j=0;j<mat.length;j++){
                System.out.print(mat[i][j]+" "); //aqui sale la matriz original
            }
            System.out.println();
        }
      System.out.println();
        iMatriz ref1=(iMatriz)Naming.lookup("Servidor1");
        iMatriz ref2=(iMatriz)Naming.lookup("Servidor2");
        iMatriz ref3=(iMatriz)Naming.lookup("Servidor3");
        iMatriz ref4=(iMatriz)Naming.lookup("Servidor4");
       
        ref1.escalar(inf, sup, mat);
      inf=sup;
      sup=sup+intervalo;
        ref2.escalar(inf, sup, mat);
      inf=sup;
      sup=sup+intervalo;
        ref3.escalar(inf, sup, mat);
      inf=sup;
      sup=sup+intervalo;
      ref4.escalar(inf,f,mat);
      
      for(int i=0;i<mat.length;i++){
            for(int j=0;j<mat.length;j++){
                System.out.print(mat[i][j]+" "); //y aqui sigue saliendo la matriz original cuando deberia salir la  multiplicada
            }
            System.out.println();
        }
      System.out.println();
      
    }
}
Hola compañeros, tengo una duda bastante curiosa y a ver si vosotros habéis tenido que hacer algo parecido.

Tengo que pintar rectangulos sobre un jpanel hasta ahi todo bien. El problema surge que una vez estan pintados, si mueves componentes por encima suyo, los borra.

Se que es por el tema de pintura, pero no se como hacer que al arrastrar no borre lo que hay dibujado sobre el, alguien sabría como hacerlo?

Gracias
elenano2 escribió:Hola compañeros, tengo una duda bastante curiosa y a ver si vosotros habéis tenido que hacer algo parecido.

Tengo que pintar rectangulos sobre un jpanel hasta ahi todo bien. El problema surge que una vez estan pintados, si mueves componentes por encima suyo, los borra.

Se que es por el tema de pintura, pero no se como hacer que al arrastrar no borre lo que hay dibujado sobre el, alguien sabría como hacerlo?

Gracias


segun tengo entendido tienes que repintar todo cada vez
He leido sobre el metodo paint o paintComponent() de swing.

Sería correcto, crear un metodo de pintura y obtener el graphics() de este panel para poder pintarlo?

Sería mas o menos asi:

Graphics2d = (Graphics2d) jpane.getGraphics();

Por que he intentado sobreescribir el metodo paint() pero no me gusta el resultado...
Hola!

Soy analista programador en entornos estructurados y desde hace un tiempo estoy haciendo cursos para aprender a programar en java. Ahora me quiero seguir formándome y me gustaría que me orientaseis. Quiero hacer cursos online de java, ¿sabéis alguna web donde hacerlo y que estén bien? No me importa pagar. Muchas Gracias.
Tengo que hacer un programa en java que usando recursividad me descomponga un numero en potencias de 2. Por ejemplo, si introduzco 33 que de como resultado 2^5 + 2^0. Alguien me podría decir como hacerlo? Llevo dias dandole vueltas pero no hay manera.
soen escribió:Tengo que hacer un programa en java que usando recursividad me descomponga un numero en potencias de 2. Por ejemplo, si introduzco 33 que de como resultado 2^5 + 2^0. Alguien me podría decir como hacerlo? Llevo dias dandole vueltas pero no hay manera.


Enseña lo que tienes hecho y a partir de ahí podemos darte algunas pistas, pero no creas que nadie te hará los deberes.
(mensaje borrado)
soen escribió:
Alecs7k escribió:
soen escribió:Tengo que hacer un programa en java que usando recursividad me descomponga un numero en potencias de 2. Por ejemplo, si introduzco 33 que de como resultado 2^5 + 2^0. Alguien me podría decir como hacerlo? Llevo dias dandole vueltas pero no hay manera.


Enseña lo que tienes hecho y a partir de ahí podemos darte algunas pistas, pero no creas que nadie te hará los deberes.


El problema es que no se como plantearlo, sin recursividad divido el numero entre 2 y con un contador cuento cuantas veces lo puede dividir mientras se cumpla x%2==0, y si no que reste 1 al resultado, pero no se como hacer para que sea recursivo.


Estoy ahora con el movil, cuando llegue a casa pongo lo que tengo pensador pero en un principio seria una funcion :
Public string function devolverFactorial (int num){

Aqui la logica de si devuelvo un 2 o devuelvo un 1

Y en el condicional de 2 haz return (num/2) + " " + devolverfactorial (num/2)

}

Seria algo asi espero que re sirva
Hola, estamos programando una práctica en java en la universidad
No es nada complicado, es leer de un fichero una serie de datos y hacer un par de opraciones con ellos
El caso es que teniamos una duda y el profesor me ha dicho que cree un objeto de la clase que contiene el metodo main, dentro del propio metodo main. Para poder tener acceso a una serie de variables. Funciona. Ese no es el problema.

A mi me parece una mala práctica la recomendación del profesor y le explicado por qué pero no le he convencido, así que os lo pregunto a vosotros:

Lo que yo digo es, ¿de que te sirve que el método main sea static si vas a estar creando objetos de la clase que lo contiene, y además dentro del propio metodo main?

Un saludo
gcvictorgc escribió:Hola, estamos programando una práctica en java en la universidad
No es nada complicado, es leer de un fichero una serie de datos y hacer un par de opraciones con ellos
El caso es que teniamos una duda y el profesor me ha dicho que cree un objeto de la clase que contiene el metodo main, dentro del propio metodo main. Para poder tener acceso a una serie de variables. Funciona. Ese no es el problema.

A mi me parece una mala práctica la recomendación del profesor y le explicado por qué pero no le he convencido, así que os lo pregunto a vosotros:

Lo que yo digo es, ¿de que te sirve que el método main sea static si vas a estar creando objetos de la clase que lo contiene, y además dentro del propio metodo main?

Un saludo

Alguien?
769 respuestas
112, 13, 14, 15, 16