Faça um programa que possua um vetor com 10 números inteiros positivos.
O seu programa deverá gerar um ArrayList apenas com os números primos existentes neste vetor.
Entretanto, o cálculo para verificação se um número é ou não primo deve ser feito através de uma Thread.
Esta Thread deve verificar APENAS UM NÚMERO por vez.
Apenas após a verificação de todos os números é que o ArrayList deve ser exibido.
public class RThread extends Thread{
int matriz[];
int numero;
public void setMatriz(int[] matriz ) {
this.matriz = matriz;
}
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public void run() {
// codigo para numeros primos e tenho que mandar um numero primo para cada thread alguem tem alguma ideia?
}// fim run
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
// cadastro os numeros do matriz
System.out.println("Digite o 1 Valor:");
String textoa = entrada.nextLine();
int a = Integer.parseInt(textoa);
System.out.println("Digite o 2 Valor:");
String textob = entrada.nextLine();
int b = Integer.parseInt(textob);
System.out.println("Digite o 3 Valor:");
String textoc = entrada.nextLine();
int c = Integer.parseInt(textoc);
System.out.println("Digite o 4 Valor:");
String textod = entrada.nextLine();
int d = Integer.parseInt(textod);
System.out.println("Digite o 5 Valor:");
String textoe = entrada.nextLine();
int e = Integer.parseInt(textoe);
System.out.println("Digite o 6 Valor:");
String textof = entrada.nextLine();
int f = Integer.parseInt(textof);
System.out.println("Digite o 7 Valor:");
String textog = entrada.nextLine();
int g = Integer.parseInt(textog);
System.out.println("Digite o 8 Valor:");
String textoh = entrada.nextLine();
int h = Integer.parseInt(textoh);
System.out.println("Digite o 9 Valor:");
String textoi = entrada.nextLine();
int i = Integer.parseInt(textoi);
System.out.println("Digite o 10 Valor:");
String textoj = entrada.nextLine();
int j = Integer.parseInt(textoj);
// variaveis
int num1 = a, num2 = b, num3 = c, num4 = d, num5 = e, num6 = f, num7 = g, num8 = h, num9 = i, num10 = j;
@SuppressWarnings("unused")
int matriz[] = { num1, num2, num3, num4, num5, num6, num7, num8, num9,
num10 };
// Instancia as Threads
RThread t1 = new RThread();
RThread t2 = new RThread();
RThread t3 = new RThread();
RThread t4 = new RThread();
RThread t5 = new RThread();
RThread t6 = new RThread();
RThread t7 = new RThread();
RThread t8 = new RThread();
RThread t9 = new RThread();
RThread t10 = new RThread();
t1.setNumero(num1);
t2.setNumero(num2);
t3.setNumero(num3);
t4.setNumero(num4);
t5.setNumero(num5);
t6.setNumero(num6);
t7.setNumero(num7);
t8.setNumero(num8);
t9.setNumero(num9);
t10.setNumero(num10);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
t7.start();
t8.start();
t9.start();
t10.start();
}
}
se poder me ajudar com alguma ideia fico grato não quero codigo pronto só ideias Valeu.
Então cara, não sou nenhum master em thread mas ultimamente estou tendo que trabalhar e entender bastante sobre isso.
Na minha opinião, na classe RThread você pode passar todos os parâmetros no construtor, e cuidar com o acesso concorrente entre as variáveis de instância.
Então no programa principal, você tem que dar join em todas as threads para o programa esperar todas as threads calcularem, e então imprimir o arraylist.
Cara de acordo com enunciado bastaria uma thread principal.No metodo run() vc faz a verificação do array indice por indice na sequência ,ou seja, uma por vez.Vc poderia estartar a thread após a 10 leitura do teclado.
Faça um programa que possua um vetor com 10 números inteiros positivos.
O seu programa deverá gerar um ArrayList apenas com os números primos existentes neste vetor.
Entretanto, o cálculo para verificação se um número é ou não primo deve ser feito através de uma Thread.
Esta Thread deve verificar APENAS UM NÚMERO por vez.
Apenas após a verificação de todos os números é que o ArrayList deve ser exibido.
Nome: Douglas Weimar
*/
public class RThread extends Thread {
int matriz[];
int numero;
public void setMatriz(int[] matriz) {
this.matriz = matriz;
}
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public void run() {
// int numero =
// Integer.parseInt(JOptionPane.showInputDialog("Digite um número"));
int verificador = this.numero;
int flag = 0;
for (int i = 2; i < verificador; i++) {
int resultado = verificador % i;
if (resultado == 0) {
System.out.println("Esse número não é primo" + numero);
flag = 1;
break;
}
}
if (flag == 0) {
System.out.println("Esse número é primo" + numero);
}
}// fim run
}// fim class Thread
[/code]
/*
* Faça um programa que possua um vetor com 10 números inteiros positivos.
O seu programa deverá gerar um ArrayList apenas com os números primos existentes neste vetor.
Entretanto, o cálculo para verificação se um número é ou não primo deve ser feito através de uma Thread.
Esta Thread deve verificar APENAS UM NÚMERO por vez.
Apenas após a verificação de todos os números é que o ArrayList deve ser exibido.
Nome: Douglas Weimar
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.println("Digite o 1 Valor:");
String textoa = entrada.nextLine();
int a = Integer.parseInt(textoa);
System.out.println("Digite o 2 Valor:");
String textob = entrada.nextLine();
int b = Integer.parseInt(textob);
System.out.println("Digite o 3 Valor:");
String textoc = entrada.nextLine();
int c = Integer.parseInt(textoc);
System.out.println("Digite o 4 Valor:");
String textod = entrada.nextLine();
int d = Integer.parseInt(textod);
System.out.println("Digite o 5 Valor:");
String textoe = entrada.nextLine();
int e = Integer.parseInt(textoe);
System.out.println("Digite o 6 Valor:");
String textof = entrada.nextLine();
int f = Integer.parseInt(textof);
System.out.println("Digite o 7 Valor:");
String textog = entrada.nextLine();
int g = Integer.parseInt(textog);
System.out.println("Digite o 8 Valor:");
String textoh = entrada.nextLine();
int h = Integer.parseInt(textoh);
System.out.println("Digite o 9 Valor:");
String textoi = entrada.nextLine();
int i = Integer.parseInt(textoi);
System.out.println("Digite o 10 Valor:");
String textoj = entrada.nextLine();
int j = Integer.parseInt(textoj);
int num1 = a, num2 = b, num3 = c, num4 = d, num5 = e, num6 = f, num7 = g, num8 = h, num9 = i, num10 = j;
@SuppressWarnings("unused")
int matriz[] = { num1, num2, num3, num4, num5, num6, num7, num8, num9,
num10 };
RThread t1 = new RThread();
RThread t2 = new RThread();
RThread t3 = new RThread();
RThread t4 = new RThread();
RThread t5 = new RThread();
RThread t6 = new RThread();
RThread t7 = new RThread();
RThread t8 = new RThread();
RThread t9 = new RThread();
RThread t10 = new RThread();
t1.setNumero(num1);
t2.setNumero(num2);
t3.setNumero(num3);
t4.setNumero(num4);
t5.setNumero(num5);
t6.setNumero(num6);
t7.setNumero(num7);
t8.setNumero(num8);
t9.setNumero(num9);
t10.setNumero(num10);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
t7.start();
t8.start();
t9.start();
t10.start();
}
}
consegui fazer cada numero primo separado alguem te alguma ideia de como eu devolvo o valor para add num arrayList na main?
Muito obrigado até agora.
[code]public class Main {
public static void main(String [] args) {
Scanner entrada = new Scanner(System.in);
//Leitura dos números.
int matriz = new int[10];
for (int i = 0; i < 10; i++) {
System.out.println("Digite o " + (i+1) + " valor:");
String texto = entrada.nextLine();
matriz[i] = Integer.parseInt(texto);
}
//Disparo das threads
RTThread rts[] = new RTThread[10];
for (int i = 0; i < 10; i++) {
RTThread rt = new RTThread(matriz[i]);
rt.start();
rts[i] = rt;
}
//Aguardando o resultado e inserindo no ArrayList
ArrayList<Integer> primos = new ArrayList<Integer>();
for (RTThread thread : rts) {
thread.join(); //Espera a thread terminar
if (rts.isPrimo()) { //Se era primo
primos.add(rts.getNumero());
}
}
System.out.println("Primos: " + primos);
Sua classe RTThread deverá ficar mais ou menos assim:
[code]
import javax.swing.JOptionPane;
/*
Faça um programa que possua um vetor com 10 números inteiros positivos.
O seu programa deverá gerar um ArrayList apenas com os números primos existentes neste vetor.
Entretanto, o cálculo para verificação se um número é ou não primo deve ser feito através de uma Thread.
Esta Thread deve verificar APENAS UM NÚMERO por vez.
Apenas após a verificação de todos os números é que o ArrayList deve ser exibido.
Nome: Douglas Weimar
*/
public class RThread extends Thread {
private int numero;
private bool primo = false;
public RTThread(int numero) {
super();
this.numero = true;
}
public int getNumero() {
return numero;
}
public bool isPrimo() {
return isPrimo;
}
private bool testaPrimo(int numero) {
if (numero == 2) { //Dois sempre é primo
return true;
}
if (numero % 2 == 0) { //Pares, fora o 2, nunca são primos
return false;
}
//Agora basta dividir pelos ímpares.
for (int i = 3; i < numero; i+=2) {
if (numero % i == 0) {
return false;
}
}
return true;
}
public void run() {
isPrimo = testaPrimo(numero);
}// fim run
}// fim class Thread [/code]
Note que fiz uma otimização no seu método que testa se é primo. Você não precisa dividir por absolutamente todos os números inferiores ao que está sendo testado para descobrir se ele é primo. Só pelos ímpares (na verdade, só pelos primos inferiores aquele numero, mas isso envolveria saber que primos são esses). Assim, podemos fazer o for pulando de 2 em 2 números, ao invés de 1 em 1.
Faça um programa que possua um vetor com 10 números inteiros positivos.
O seu programa deverá gerar um ArrayList apenas com os números primos existentes neste vetor.
Entretanto, o cálculo para verificação se um número é ou não primo deve ser feito através de uma Thread.
Esta Thread deve verificar APENAS UM NÚMERO por vez.
Apenas após a verificação de todos os números é que o ArrayList deve ser exibido.
Nome: Douglas Weimar
*/
public class RThread extends Thread {
int numero;
public int getNumero() {
return this.numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public void run() {
int flag = 0;
for (int i = 2; i < this.numero; i++) {
int resultado = this.numero % i;
if (resultado == 0) {
this.numero = -1;
// System.out.println("Esse número não é primo: " + numero);
flag = 1;
break;
}
}
if (flag == 0) {
// System.out.println("Esse número é primo: " + numero );
}
}// fim run
}// fim class Thread[/code]
[code]
/*
Faça um programa que possua um vetor com 10 números inteiros positivos.
O seu programa deverá gerar um ArrayList apenas com os números primos existentes neste vetor.
Entretanto, o cálculo para verificação se um número é ou não primo deve ser feito através de uma Thread.
Esta Thread deve verificar APENAS UM NÚMERO por vez.
Apenas após a verificação de todos os números é que o ArrayList deve ser exibido.