Java - Ejecutar tablas de multiplicar concurrentemente

 
Vista:
sin imagen de perfil

Ejecutar tablas de multiplicar concurrentemente

Publicado por Jesus Angel (5 intervenciones) el 17/09/2014 13:09:55
Hola, no se como hacer para ejecutar las tablas de multiplicar de manera concurrente, por ejemplo de 2 números tiene que salir 1x1=1, 2x1=2, 1x2=2, 2x2=2, etc
de momento solo me sale la tabla de un número entera y luego la del otro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class ManipulaTabla extends Thread{
    private Tabla t;
    private int num;
    public ManipulaTabla(Tabla t, int num){
        this.t = t;
        this.num = num;
    }
    public void run(){
        synchronized(t){
            for(int i=1;i<11;i++){
                System.out.println(num + " x "+ i + " = "+(num*i));
            }
            t.notify();
        }
    }
}
 
 
public class Ejercicio {
 
    public static void main(String[] args) {
        int n1,n2;
        Tabla tabla = new Tabla();
 
        Scanner sc=new Scanner(System.in);
        sc.useDelimiter("\n");
        System.out.println("Dame un número:");
        n1 = sc.nextInt();
        System.out.println("Dame otro número:");
        n2 = sc.nextInt();
 
 
        ManipulaTabla mt1 = new ManipulaTabla(tabla,n1);
        ManipulaTabla mt2 = new ManipulaTabla(tabla,n2);
 
        mt1.start();
        mt2.start();
 
        synchronized(tabla){
            try{
                tabla.wait();
            }catch(InterruptedException e){
                e.printStackTrace();
            }
        }
    }
 
}

Necesito ayuda.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Ejecutar tablas de multiplicar concurrentemente

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 17/09/2014 16:58:03
Hola,
Perdona pero no entiendo tu código. Yéndome a lo que dice tu enunciado, y de acuerdo a lo poco que entiendo en tu código esto lo puedes hacer así
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class ManipulaTabla extends Thread {
 
	private int num;
 
	public void setNum(int num) {
		this.num = num;
	}
 
	public ManipulaTabla(int num) {
		this.num = num;
	}
 
	@Override
	public void run() {
		// TODO Auto-generated method stub
 
		mostrar();
 
	}
 
	private void mostrar() {
		for (int i = 1; i <= 10; i++) {
			System.out.println(num + " x " + i + " = " + i * num);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}


y en el main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class Principal {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("Dame un número:");
		int n1 = sc.nextInt();
		System.out.println("Dame otro número:");
		int n2 = sc.nextInt();
 
		ManipulaTabla mt1 = new ManipulaTabla(n1);
		mt1.start();
		ManipulaTabla mt2 = new ManipulaTabla(n2);
		mt2.start();
 
	}
}


Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ejecutar tablas de multiplicar concurrentemente

Publicado por Jesus Angel (5 intervenciones) el 17/09/2014 18:55:48
De la manera que he has dicho no me salen ordenados como yo quiero, salen asi:

1 x 1 = 1
2 x 1 = 2
2 x 2 = 4
1 x 2 = 2
2 x 3 = 6
1 x 3 = 3

deberia de ser:

1 x 1 = 1
2 x 1 = 2
1 x 2 = 2
2 x 2 = 4
1 x 3 = 3
2 x 3 = 6
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Ejecutar tablas de multiplicar concurrentemente

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 17/09/2014 20:37:59
HOla,
PUedes hacer que se pase como parametro un long que sea los milisegundos que duerme cada hilo. al primero le colocas menos y listo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ManipulaTabla mt1 = new ManipulaTabla(n1,1000l);
		mt1.start();
		ManipulaTabla mt2 = new ManipulaTabla(n2,1010l);
		mt2.start();
 
/*--------------------------------------------------------------------------------------------*/
class ManipulaTabla extends Thread {
//...
private long l;
public ManipulaTabla(int num, long l) {
		this.num = num;
		this.l=l;
	}
//...
private void mostrar() {
          //...
          Thread.sleep(l);
         //...


Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar