Java - Java

Filtrado por el usuario: anonymous
<<>>
Filtrado por el usuario 'anonymous' (Eliminar fitro)
 
Vista:

Java

Publicado por Andres (1 intervención) el 13/01/2022 14:55:07
Hola soy un poco nuevo y tengo problemas ya tengo esta parte del contador de vocales y caracteres etc. Pero quisiera implementarla con hilos y no se muy bien de que manera




public class ejecutable extends Thread{

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

String texto;
int contador1 = 0, contador2 = 0,consonantes,espacio = 0, guión = 0,
punto = 0, coma = 0;
int vocal_a = 0;
int vocal_e = 0;
int vocal_i = 0;
int vocal_o = 0;
int vocal_u = 0;



System.out.println("introduzca un texto");

texto = in.nextLine();

for (int i=0; i<texto.length(); i++){
contador1++;
}
for (int i=0; i < texto.length(); i++){
/*Condición que evalua la cadena ingresada
* en busca de las siguientes vocales*/
if((texto.charAt(i)=='a')||(texto.charAt(i)=='e')||
(texto.charAt(i)=='i')||(texto.charAt(i)=='o')||
(texto.charAt(i)=='u')){
contador2++;
}
if(texto.charAt(i)==' '){
espacio++;
}
if(texto.charAt(i)=='-'){
guión++;
}
if(texto.charAt(i)=='.'){
punto++;
}
if(texto.charAt(i)==','){
coma++;
}

if(texto.charAt(i)=='a'){
vocal_a++;
}

if(texto.charAt(i)=='e'){
vocal_e++;
}

if(texto.charAt(i)=='i'){
vocal_i++;
}
if(texto.charAt(i)=='o'){
vocal_o++;
}
if(texto.charAt(i)=='u'){
vocal_u++;
}
}


consonantes = contador1-contador2-espacio-guión-punto-coma;
System.out.println(contador1 + " Caracteres " );
System.out.println(contador2 + " Vocales " );
System.out.println(vocal_a + " a " );
System.out.println(vocal_e + " e " );
System.out.println(vocal_i + " i " );
System.out.println(vocal_o + " o " );
System.out.println(vocal_u + " u " );
System.out.println(espacio + " Espacios " );
System.out.println(guión + " Guiones " );
System.out.println(punto + " Puntos " );
System.out.println(coma + " Comas " );

}
private void esperarXsegundos(final int segundos) {
try {
Thread.sleep(segundos * 1000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Java

Publicado por Kabuto (1381 intervenciones) el 13/01/2022 23:56:02
Mmmmmh... no me queda claro exactamente lo que quieres conseguir.

Pero, por si sirve de inspiración....
Usar hilos es para cuando queremos ejecutar tareas paralelas. Entonces, podemos plantear un conteo por separado de vocales, consonates y símbolos en un texto.

Es decir, tendremos una clase Thread que contará vocales:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class CuentaVocales extends Thread {
 
	private String texto;
 
	public CuentaVocales(String texto) {
		this.texto = texto;
	}
 
	@Override
	public void run() {
		final String VOCALES = "aeiouáéíóú";
		int contVocales = 0;
 
		for (int i = 0; i < texto.length(); i++) {
			Character caracter = texto.toLowerCase().charAt(i);
			if (VOCALES.contains(caracter.toString()))
				contVocales++;
		}
 
		System.out.println("Resultado hilo contador VOCALES: " + contVocales);
	}
 
}

Otra, que contará consonates:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class CuentaConsonantes extends Thread {
 
	private String texto;
 
	public CuentaConsonantes(String texto) {
		this.texto = texto;
	}
 
	@Override
	public void run() {
		final String CONSONANTES = "bcdfghjklmnpqrstvwxyzñ";
		int contConsonantes = 0;
 
		for (int i = 0; i < texto.length(); i++) {
			Character caracter = texto.toLowerCase().charAt(i);
			if (CONSONANTES.contains(caracter.toString()))
				contConsonantes++;
		}
 
		System.out.println("Resultado hilo contador CONSONANTES: " + contConsonantes);
	}
 
}

Y otra que contará símbolos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class CuentaSimbolos extends Thread {
 
	private String texto;
 
	public CuentaSimbolos(String texto) {
		this.texto = texto;
	}
 
	@Override
	public void run() {
		final String SIMBOLOS = "._-,;¿?!@#(){}[]";
		int contSimbolos = 0;
 
		for (int i = 0; i < texto.length(); i++) {
			Character caracter = texto.toLowerCase().charAt(i);
			if (SIMBOLOS.contains(caracter.toString()))
				contSimbolos++;
		}
 
		System.out.println("Resultado hilo contador SIMBOLOS: " + contSimbolos);
	}
 
}

Fíjate que cuando creamos una clase Thread, el código que queremos que se ejecute cuando el hilo se ponga en marcha, se escribe en su método run()
Las tres clases son muy similares, reciben un String por constructor y cada una se dedicará a un tipo de carácter en concreto.


Bien, ahora con esto podemos crear una clase principal donde tendremos un String con un texto. Crearemos tres objetos, uno para cada una de nuestras clases Thread, a las cuales le daremos a todas el mismo texto.

Y los pondremos en marcha con start().

Cada hilo al terminar, informa de lo que ha contado.
Y si ejecutas varias veces el programa, verás que no siempre termina primero el mismo hilo, lo cuál prueba que no se ejecutan según el orden en el que se inician en el código.
Si no que se ejecutan en paralelo y en cada ejecución, los recursos del sistema que se le asignan a cada hilo pueden variar y por eso unas veces "gana" un hilo y otra veces "gana" otro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Main {
 
	public static void main(String[] args) {
		final String texto = "Un tigre que cuando cachorro habia sido capturado por humanos fue liberado luego de varios años de vida domestica.\rLa vida entre los hombres no habia menguado sus fuerzas ni sus instintos; en cuanto lo liberaron, corrio a la selva.\rYa en la espesura, sus hermanos teniéndolo otra vez entre ellos, le preguntaron:\r\n"
				+ "-¿Que has aprendido?\r"
				+ "El tigre meditó sin prisa. Quería transmitirles algún concepto sabio, trascendente.\rRecordó un comentario humano:\r\"Los tigres no son inmortales. Creen que son inmortales porque ignoran la muerte, ignoran que morirán.\"\r\n"
				+ "Ah, pensó el tigre para sus adentros, ese es un pensamiento que los sorprenderá: no somos inmortales, la vida no es eterna.\r-Aprendí esto- dijo por fin-.\rNo somos inmortales solo ignoramos que alguna vez vamos a....\r\n"
				+ "Los otros tigres no lo dejaron terminar de hablar, se abalanzaron sobre el, le mordieron el cuello y lo vieron desangrarse hasta morir.\rEs el problema de los enfermos de muerte -dijo uno de los felinos-. Se tornan resentidos y quieren contagiar a todos.''\r\n"
				+ "Marcelo Birmajer, El tigre enfermo";
 
		System.out.println("Texto a analizar:\n\n" + texto + "\n");
 
		//Preparando hilos
		CuentaVocales cv = new CuentaVocales(texto);
		CuentaConsonantes cc = new CuentaConsonantes(texto);
		CuentaSimbolos cs = new CuentaSimbolos(texto);
		//Puesta en marcha
		cv.start();
		cc.start();
		cs.start();
	}
 
}
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