Ejercicios Java

DeMoNSlaYeR

Buenas posibles futuros cyberterroristas tengo problemas con unos ejercicios de java que me mandaron en clase y venía a pediros un poco de ayuda ya que si no termino unos cuantos esta semana suspendo el ciclo y me jodería mucho haber perdido dos años por no aprender todo lo que me pedían de java. Bueno el código me da algunos errores y seguro que vosotros ya veis unos cuantos a simple vista, yo soy bastante nulo con esto de java.
Aora os describo los ejercicios

1º Procesar cadenas leidas por teclado.
Realizar un programa en Java que obtenga por teclado una frase y realice las
siguientes operaciones:
Se realizará una clase frase con un atributo cadena que contendrá la frase
obtenida por teclado á la frase obtenida por teclado varios métodos eliminar_blancos()
que eliminará los espacios en blanco al principio y al final de la frase contenida en el
atributo cadena, contar_letras() que devuelve el número de letras de la frase contenida
en el atributo cadena, invertir_frase() que devuelve un StringBuffer con la cadena
invertida, contar_palabras() que devuelve el número de palabras de la cadena,
separar_palabras() que devuelve un array de String conteniendo las palabras de la
cadena separadas, primera_vocal() y ultima_vocal() que devuelven la primera posición
de una vocal en la frase y la ultima posición de una vocal en la frase, es_mayuscula()
que devuelve si la primera letra es o no mayúscula, mayuscula() que devuelva un
StringBuffer con la cadena en mayúscula, minuscula() que devuelva un StringBuffer con
la cadena en minúscula, vectorizar() que devuelve la cadena como un vector de letras

Este es mi código de momento:

import java.io.*;

class exercicios{

String eliminar_blancos(string frase){
	int l=txt.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=txt.charAt(j);
	for(int i=0;i<frase.length();i++){
	if(frase.charAt(cont)==' '){
		for(j=cont;j<frase.length();j++){
			frase.charAt(j)=frase.charAt(j+1);
			}
		}
	}
	return frase;
}

int contar_letras(string frase){
	int i=frase.length();
	return i;
}

String invertir_frase(){
	int l=txt.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=txt.charAt(j);
	for (i=0, j=l-1;i<j;i++, j--){
		char temp = c[i];
		c[i] = c[j];
		c[j] = temp;
		}
}

int contar_palabras(string frase){
int l=txt.length();
char[] c=new char[l];
for(int j=0;j<l;j++)
	c[j]=txt.charAt(j);
int cont=0;
for(int j=0;j<frase.length();j++){
	if(frase.charAt(j)==' '){
		cont++;
return cont;
}

int primera_vocal(string frase){
	int l=txt.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=txt.charAt(j);
int cont=0;
int flag=0;
for(int i=0;i<frase.length()&&flag=0;i++){
	if(frase.charAt(i)=='a'||frase.charAt(i)=='e'||frase.charAt(i)=='i'||frase.charAt(i)=='o'||frase.charAt(i)=='u'||frase.charAt(i)=='A'||frase.charAt(i)=='E'||frase.charAt(i)=='I'||frase.charAt(i)=='O'||frase.charAt(i)=='U'){
		cont=i;
		flag=1;
		}
	}
return cont;
}

int ultima_vocal(string frase){
	int l=txt.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=txt.charAt(j);
int cont=0;
for(int i=0;i<frase.length();i++){
	if(frase.charAt(i)=='a'||frase.charAt(i)=='e'||frase.charAt(i)=='i'||frase.charAt(i)=='o'||frase.charAt(i)=='u'||frase.charAt(i)=='A'||frase.charAt(i)=='E'||frase.charAt(i)=='I'||frase.charAt(i)=='O'||frase.charAt(i)=='U')
		cont++;
	}
return cont;
}

int es_mayuscula(string frase){
	int l=txt.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=txt.charAt(j);
int cont=0;
for(int i=0;i<frase.length();i++){
	if()
		cont=1;
	else
		cont=0;
return cont;
}

/*String mayuscula(string frase){

}

String minuscula(string frase){

}*/

String vectorizar(string frase){
int l=frase.length();
char[] c=new char[l];
for(int j=0;j<l;j++)
	c[j]=txt.charAt(j);
return char[];
}


}


public class bol5ex8{
public static void main(String []args) throws IOException{

InputStreamReader flujo;
BufferedReader teclado;
teclado=new BufferedReader (new InputStreamReader(System.in));

String texto;

System.out.println("Introduza unha frase");
texto=teclado.readLine();

string texto2=exercicios.eliminar_blancos(texto);
System.out.println(texto2);

int numeroletras=exercicios.contar_letras(texto);
System.out.println("O numero de letras da frase e: "+numeroletras);

string texto3=exercicios.invertir_frase(texto);
System.out.println("A frase invertida e: "+texto3);

int palabras=exercicios.contar_palabras(texto);
System.out.println("O numero de palabras e: " +palabras);

int privocal=exercicios.primera_vocal(texto);
System.out.println("A primeira vocal e: " +privocal);

int ultvocal=exercicios.ultima_vocal(texto);
System.out.println("A ultima vocal e: "+ultvocal);

int esmayus=exercicios.es_mayuscula(texto);
if (esmayus=0)
	System.out.println("La primera letra es mayuscula");
else
	System.out.println("La primera letra es minuscula");

/*string texto4=exercicios.mayuscula(texto);
System.out.println("La frase en mayusculas: "+texto4);

string texto5=exercicios.minuscula(texto);
System.out.println("La frase en minusculas: "+texto5);*/

l=texto.length();
char vector[n]=exercicios.vectorizar(texto);/*Pasar a vector(array) de char*/
System.out.println("La frase vectorizada: ");
for (int i=0;i<l;i++)
	System.out.print(vector[i]);


}
}

le faltan por completar un par de metodos pero los fallos no son de eso, toda ayuda me viene dpm.

2º Definir una clase Conjunto que contenga:

  • Un array de valores de cualquier tipo.
  • Un método interseccion que tome como argumento otro conjunto, y devuelva un nuevo
    conjunto con la intersección de los dos, es decir, los elementos de la primera lista que son
    equal a algún elemento de la segunda.
import java.io.*;

class interseccion{
	string inter(string txt){
	int j,i;
	BufferedReader t;
	InputStreamReader f;
	String txt2;
	
f=new InputStreamReader(System.in);
t=new BufferedReader(f);

System.out.println("Introduza varios numeros ou letras: ");
txt2=t.readLine();

int l=txt.length();
	char[] c=new char[l];
	for(j=0;j<l;j++)
		c[j]=txt.charAt(j);
int g=txt2.length();
	char[] c=new char[g];
	for(j=0;j<l;j++)
		c[j]=txt2.charAt(j);

for (i=0;i<l;i++){
	for (j=0;j<g;j++){

	}
}
}

public class bol5ex11{

int j,i;
BufferedReader t;
InputStreamReader f;
String txt;

f=new InputStreamReader(System.in);
t=new BufferedReader(f);

System.out.println("Introduza varios numeros ou letras: ");
txt=t.readLine();

interseccion.inter(txt);

}

también me da fallos y no se si hace del todo bien lo que me pide el ejercicio.

No os pido que me hagais los ejercicios eso sería hecharle mucha cara, no se casi nada de java y seguro que son cosas que saltan a la vista asique si me decis los errores que veis y como poder solucionarlos me vendría muy muy bien.
Enga un abrazo cyberterrorista.

edit: #2 ya están con la etiqueta code, no sabía que existia :)

Lecherito

Te pediría que usaras la etiqueta [ CODE ] ya que sería muchísimo más sencillo para la gente leer tus codigos, yo, por el momento, espero a que edites, es imposible leer así xD

1 respuesta
DeMoNSlaYeR

He conseguido avances en el primero:

import java.io.*;

class exercicios{

void exercicio(String frase){
}

public String eliminar_blancos(String frase){
	int l=frase.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=frase.charAt(j);
	for(int i=0;i<frase.length();i++){
	if(frase.charAt(i)==' '){
		for(int j=i;j<frase.length();j++){
			frase.charAt(j)=frase.charAt(j+1);
			}
		}
	}
	return frase;
}

public int contar_letras(String frase){
	int i=frase.length();
	return i;
}

public String invertir_frase(String frase){
	int l=frase.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=frase.charAt(j);
	for (int i=0, j=l-1;i<j;i++, j--){
		char temp = c[i];
		c[i] = c[j];
		c[j] = temp;
		}
	return frase;
}

public int contar_palabras(String frase){
	int l=frase.length();
	int j=0;
	char[] c=new char[l];
	for(j=0;j<l;j++)
		c[j]=frase.charAt(j);
	int cont=0;
		for(j=0;j<frase.length();j++){
			if(frase.charAt(j)==' '){
				cont++;
			}
		}
	return cont;
}

public int primera_vocal(String frase){
	int l=frase.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=frase.charAt(j);
	int cont=0;
	int flag=0;
	for(int i=0;i<frase.length()&&flag==0;i++){
	if(frase.charAt(i)=='a'||frase.charAt(i)=='e'||frase.charAt(i)=='i'||frase.charAt(i)=='o'||frase.charAt(i)=='u'||frase.charAt(i)=='A'||frase.charAt(i)=='E'||frase.charAt(i)=='I'||frase.charAt(i)=='O'||frase.charAt(i)=='U'){
		cont=i;
		flag=1;
		}
	}
return cont;
}

public int ultima_vocal(String frase){
	int l=frase.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=frase.charAt(j);
	int cont=0;
	for(int i=0;i<frase.length();i++){
	if(frase.charAt(i)=='a'||frase.charAt(i)=='e'||frase.charAt(i)=='i'||frase.charAt(i)=='o'||frase.charAt(i)=='u'||frase.charAt(i)=='A'||frase.charAt(i)=='E'||frase.charAt(i)=='I'||frase.charAt(i)=='O'||frase.charAt(i)=='U')
		cont++;
	}
return cont;
}

/*public int es_mayuscula(String frase){
	int l=frase.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=frase.charAt(j);
	int cont=0;
	for(int i=0;i<frase.length();i++){
		if()
			cont=1;
		else
			cont=0;
	return cont;
}
}

/*public String mayuscula(String frase){

}

public String minuscula(String frase){

}

public String vectorizar(String frase){
	int l=frase.length();
	char[] c=new char[l];
	for(int j=0;j<l;j++)
		c[j]=frase.charAt(j);
	return c;
}*/


}


public class bol5ex8{
public static void main(String []args) throws IOException{

InputStreamReader flujo;
BufferedReader teclado;
teclado=new BufferedReader (new InputStreamReader(System.in));

String texto;

System.out.println("Introduza unha frase");
texto=teclado.readLine();

new exercicio(texto);

String texto2=exercicios.eliminar_blancos(texto);
System.out.println(texto2);

int numeroletras=exercicios.contar_letras(texto);
System.out.println("O numero de letras da frase e: "+numeroletras);

String texto3=exercicios.invertir_frase(texto);
System.out.println("A frase invertida e: "+texto3);

int palabras=exercicios.contar_palabras(texto);
System.out.println("O numero de palabras e: " +palabras);

int privocal=exercicios.primera_vocal(texto);
System.out.println("A primeira vocal e: " +privocal);

int ultvocal=exercicios.ultima_vocal(texto);
System.out.println("A ultima vocal e: "+ultvocal);

/*int esmayus=exercicios.es_mayuscula(texto);
if (esmayus=0)
	System.out.println("La primera letra es mayuscula");
else
	System.out.println("La primera letra es minuscula");

/*String texto4=exercicios.mayuscula(texto);
System.out.println("La frase en mayusculas: "+texto4);

String texto5=exercicios.minuscula(texto);
System.out.println("La frase en minusculas: "+texto5);

l=texto.length();
char vector[n]=exercicios.vectorizar(texto);/*Pasar a vector(array) de char
System.out.println("La frase vectorizada: ");
for (int i=0;i<l;i++)
	System.out.print(vector[i]);*/


}
}
FuckingEnemy

Para poner una frase en mayuscula es toUpperCase() y para minuscula toLowerCase() si no me confundo.

1 respuesta
GamA

#4 No te confundes, además #1, el método "eliminar_blancos" puedes sustituirlo por el método "replace" de la clase String. Le dices que remplace los " " por lo que quieras y ya está.

Si quieres echarle un vistazo a la API de la clase String de Java la tienes aquí:
http://download.oracle.com/javase/6/docs/api/java/lang/String.html

Acostúmbrate porque te va a ayudar muchísimo :)

Por cierto el código:

int contar_letras(string frase){
        int i=frase.length();
        return i;
}

Puedes cambiarlo directamente por:

int contar_letras(string frase){
        return frase.length();
}

Es más eficiente ya que ahorras la operación de guardar en una variable y además ocupas 4 bytes menos en la pila FUCK YEAH ! :P

DeMoNSlaYeR

gracias a los dos! aora tengo un fallo que debe ser bastante gordo porque me sale al llamar a todos los metodos es el siguiente:

bol5ex8.java:146: non-static method primera_vocal(java.lang.String) cannot be re
ferenced from a static context
int privocal=exercicios.primera_vocal(texto);

asi en los 6 metodos que estan activos y terminados (los que estan sin comentar).

1 respuesta
Amazon

#6 Añade "static" a las propiedades de primera_vocal(string frase), se te debería de solucionar

DeMoNSlaYeR

Ahora si solo quedan dos fallos...

D:\Programas\copia>javac bol5ex8.java
bol5ex8.java:16: unexpected type
required: variable
found : value
frase.charAt(j)=frase.charAt(j+1);
^
bol5ex8.java:132: cannot find symbol
symbol : class exercicio
location: class bol5ex8
new exercicio(texto);
^
2 errors

Creo que despues de aprender a hacer este puedo hacer el resto casi todo solo, cuando acabe con todos los subo en un archivo y pongo el link igual dentro de un tiempo le hacen falta a otro que este estudiando java en clase.

1 respuesta
Amazon

#8 Dudo mucho que sea lo que te voy a decir, pues no he visto el ejercicio ni nada, pero controlas que j+1 no se salga del array? Es decir, que j+1 nunca sea 4 si frase es frase[4] por ejemplo

DeMoNSlaYeR

Si en teoria el bucle para al llegar al final de la frase, lo que voi hacer es probar con replace como dijeron por arriba.

Amazon

Si lo que intentas es quitar los espacios de inicio y final, por qué no usas .trim?

http://download.oracle.com/javase/6/docs/api/java/lang/String.html#trim%28%29

DeMoNSlaYeR

Joder tienes razón fallo mio no habia leido bien el ejercicio, pensaba que tenia que sacarlos todos XD
Aora que lo tenía ya listo.... FUUUU
del otro error que queda sabes algo?

1 respuesta
Amazon

#12 JAJAJ perdón por no contestar antes, la verdad es que lo ví ayer pero pensé que lo ibas a hacer, hasta que ví eso xD.

Me puedes poner un pastebin con el código? A ver si le encuentro algo (tienes 1 hora y media xD)

http://pastebin.com/

DeMoNSlaYeR

http://pastebin.com/je3kDPa4

El fallo dice que es en la linea 122 donde creo el objeto.. supongo

1 respuesta
Amazon

#14 Estas intentando crear exercicio, y eso no es nada, prueba a crear exercicios sustituyendo esto:

new exercicio(texto);

por esto

new exercicios();

Lo demás viene sólo

DeMoNSlaYeR

GRACIAS!! Ahora si que funciona, solo me falta acabar los otros métodos y ponerlos a funcionar que no creo que tenga ningún problema.

VipeR_CS

Si son ejercicios para clase, esto de hacer las cosas con las clases de Java no sé yo eh, supongo que pedirán que lo hagas a mano, muriéndote del asco con bucles y esas cosas xD

1 respuesta
JuAn4k4

Puedes hacer practicamente todo, sin variables ni nada...

String ya tiene metodos para casi todo.

el reverse de StringBuilder le da la vuelta al String.

el String.trim() quita espacios del final y principio...

etc...

Si quieres hacerlo a mano, echale un ojo a las implementaciones de ahi..., aunq no se si las entenderas

Otra...

static -> De la clase

no static -> del objeto

si haces :
(Frase = clase) [ public class Frase ...]

Frase.metodo(...) // estatico

Frase f = new Frase();
f.metodo(..); // objeto

Desde algo estatico no puedes acceder a nada dinámico

class Frase {

...
public static void statico(){

dinamico(); // MAL !
}

public void dinamico() {

statico(); //OK!

}

1 respuesta
DeMoNSlaYeR

#17 ya lo se pero intentaré que cole así, es la única asignatura que me queda por aprobar no creo que me vaya a joder el ciclo por unos métodos abreviados.

#18 Gracias, algunas cosas como el .trim ya lo uso aunque no creo que sirva para clase lo voi dejar asi y lo otro que dices no me entero XD ya lo tengo terminado dejo aqui el codigo(solo funciona mal el metodo de dar la posicion de la ultima vocal):

spoiler
1 respuesta
Amazon

#19 Por qué no empiezas a contar desde atrás buscando la vocal? i=j-1; i>0; i--

JuAn4k4

No hagas char[] c = new char[1]; y luego hagas c[j] = x; Te va a petar...

char c;
int i = j.length()-1; // creo que es -1
int indice = -1;

while (indice == -1 && i >= 0) {

c = j.charAt(i);

if (c.equals('a') ||...) {
 indice = i;
}
i--;

}

return indice;
FuckingEnemy

No estoy seguro de lo que voy a decir te puede servir, pero podrias intentar hacer substrings y luego buscar la ultima subcadena.

MrAw3s0m3

Aprovecho este post para no abrir uno nuevo.

Tengo una pequeña duda que no estoy consiguiendo solucionar.

Es un ejercicio que consiste en leer de un fichero de texto los datos de unos trabajadores (id, nombre y clase), y leer de otro fichero unos proyectos(id, descripccion y clase).

Pues bien, hay un metodo que consiste en meter la id de un trabajador y listar el numero de proyectos que puede hacer (para que esto suceda su clase tiene que ser mayor a la del proyecto).

Esto es lo que tengo escrito (o donde esta el problema, que el programa es mas largo):

public void consultaProyectos(int idT)throws NoExiste, IOException{
        Trabajador t= lTra.buscaTrabajador(idT);
        String s= "";
        
if(t==null){ throw new NoExiste(); } for(Proyecto p: proyectos){ if(t.clase()>p.clase()){ s=s+"ID: "+p.identificacion()+"\n"; }else{ System.out.println("Error"); } } System.out.println("Proyectos disponibles: \n"); System.out.println(s); }

La cosa es que no me pinta esos ids en pantalla y no se por que, porque lee bien los datos en otro metodo de esta clase.

1 respuesta
Khanser

#23 puedes pegar la definición de la clase trabajador?

1 respuesta
MrAw3s0m3

#24 ¿Te refieres a la clase Trabajador?

Es esta:

spoiler

O esto, no se:


private ArrayList <ListaTrabajador> listaTrabajador = new ArrayList <ListaTrabajador>();
ListaTrabajador lTra=new ListaTrabajador();

Khanser

Ya has debugado para ver que tienes las listas de proyectos y trabajadores llenas?

1 respuesta
MrAw3s0m3

#26 Buah, creo que voy a pasar de ello. Ademas era una parte voluntaria. A no ser que venga un iluminao y diga algo.

pdj

sin tener ni idea de la logica, ¿no puede ser que deban ser iguales?

if(t.clase()>p.clase()){
                s=s+"ID: "+p.identificacion()+"\n";
            }else{
                System.out.println("Error");
            }
if(t.clase()==p.clase()){
                s=s+"ID: "+p.identificacion()+"\n";
            }else{
                System.out.println("Error");
            }

¿te da algun error o simplemente no funciona "la logica"?

1 respuesta
MrAw3s0m3

#28 No, no es por la logica, el enunciado decia que tenia que ser mayor, es solo un detalle.

Da error en que no muestra nada en pantalla aunque debiera mostrarlo.

Otros metodos si que leen bien los datos de los trabajadores como de los proyectos, asi que supongo que sera que a mi codigo le falta algo.

1 respuesta
pdj

#29 Mira a ver si proyectos esta vacio :O haz un System.out.println(String.valueOf(p.size()?));

Usuarios habituales

  • pdj
  • MrAw3s0m3
  • Khanser
  • FuckingEnemy
  • JuAn4k4
  • Amazon
  • DeMoNSlaYeR