Java - llamar a métodos desde el main

 
Vista:
sin imagen de perfil

llamar a métodos desde el main

Publicado por Rafa (13 intervenciones) el 25/09/2015 01:21:55
Buenas tardes,

La verdad es que soy nuevo programando, y realizando unos estudios me han mandado un ejercicio muy sencillo, pero me he bloqueado. El ejercicio pide:
1.- Crear un array cuyo tamaño se indique mediante un constructor.
2.- una vez creado que le podamos añadir caracteres al final.
3.- Contar el numero de vocales que hay en el array
4.- Imprimir el array

Este es el código que he realizado pero contiene errores que no se resolver y sobre todo no se llamar a los métodos desde el main

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
49
50
51
52
53
54
55
56
57
58
import java.util.Scanner;
 
 
public class Texto {
 
	static Scanner vec= new Scanner(System.in);
 
	public static char [] vector;
 
	public Texto (int posiciones){
		vector = new char [posiciones];
		for(int x=0;x<posiciones;x++){
			System.out.println ("Introduce datos:");
			String s= vec.nextLine();
			vector = s.toCharArray();
			}
 
 
	}
 
	 public static void Incrementar ( char a){
		System.out.println ("Indica el carácter que quieres introducir:");
		for (int x=0;x<vector.length; x++){
			if (vector[x] != ' '){
				String s = vec.nextLine();
				vector = s.toCharArray();
				vector[x]=vector[a];
			}
 
		}
	}
 
	 public static void contador(){
		 int cont =0;
		 for (int x=0;x<vector.length; x++){
			 if ((vector[x] == 'a') || (vector[x] == 'e') || (vector[x] == 'i') || (vector[x] == 'o') || (vector[x] == 'u')){
				 cont ++;
			 }
		 }
		 System.out.println ("El vector contiene" + cont + "vocales");
	 }
 
	 public static void imprimir(){
		 for (int i=0; i<posiciones;i ++){
		  System.out.println ("El valor del vector es".vector[i]);
		 }
 
	 }
 
	 public static void main(String args[]){
		Scanner tecl= new Scanner(System.in);
		int a;
		System.out.println ("De cuantas posiciones quieres crear el array:");
		a = tecl.nextInt();
 
 
	 }
}

Espero me podáis orientar un poco acerca de lo que hago mal.Saludos
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 Vainas

llamar a métodos desde el main

Publicado por Vainas (2 intervenciones) el 25/09/2015 19:28:29
Buenas:

A ver si puedo en el foro refrescar un poco los conocimientos que tengo de Java. Yo creo que la forma que tienes para entenderlo un poco mejor es crear una nueva clase independiente de la principal asi entenderas como tienes que hacer las llamadas. Yo crearia la clase miVector asi:

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
package texto;
 
public class miVector {
 
    public char[] vector;
 
    public miVector(int posiciones) {
        this.vector = new char[posiciones];
    }
 
    public void rellenaVector(char[] vect) {
        for (int x = 0; x < this.vector.length; x++) {
            vector[x] = vect[x];
        }
    }
 
    public void Incrementar(char a) {
       //........
    }
 
    public int contadorVocales() {
        int cont = 0;
        for (int x = 0; x < this.vector.length; x++) {
            if ((vector[x] == 'a') || (vector[x] == 'e') || (vector[x] == 'i') || (vector[x] == 'o') || (vector[x] == 'u')) {
                cont++;
            }
        }
        return cont;
    }
 
    public String imprimir() {
        String vect = "[";
        for (int i = 0; i < this.vector.length; i++) {
            vect += this.vector[i] + ", ";
        }
        vect += "]";
        return vect;
    }
}

Y luego aparte ya lo que tengo que hacer es crear objetos de la misma en el main:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package texto;
import java.util.Scanner;
 
public class Texto {
 
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        System.out.println("--- Programa Vector ---");
        System.out.print("¿Cuantas posiciones quieres que sea el vector?: ");
        int posiciones = entrada.nextInt();
        entrada.nextLine();
        miVector myvector = new miVector(posiciones);
        System.out.print("Introduce los datos del vector: ");
        char[] vect = entrada.nextLine().toCharArray();
        myvector.rellenaVector(vect);
        int num_vocales = myvector.contadorVocales();
        System.out.println("El vector tiene "+num_vocales+" vocales.");
        String imprimir_vector = myvector.imprimir();
        System.out.println("El contenido del vector es: "+imprimir_vector);
    }
 
}

Fijate que la clase vector solo la tengo para imprimir cosas al usuario y crear las instancias de la clase. Creando los objetos de la clase vector puedo llamar a sus metodos. Ademas los metodos de la clase vector NO son static asi puedes crear varios objetos vectores diferentes....

Te he dejado sin implementar Incrementar ya que esa tiene una particularidad y es que los vectores no se pueden ampliar, si fijas un tamaño ya no puedes volver a cambiarlo y tienes que crear un nuevo vector. Eso te lo dejo para que lo revises.

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

llamar a métodos desde el main

Publicado por Rafa (13 intervenciones) el 28/09/2015 18:55:42
Muchas gracias Vainas,

La verdad es que me has ayudado muchísimo, pero hay un problema. En los métodos en los que se retorna algo, luego cuando los llamo en el main me dice que no se puede crear una referencia estática en un método declarado como no estático.

Alguna idea??

Gracias y 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

llamar a métodos desde el main

Publicado por Rafa (13 intervenciones) el 28/09/2015 20:23:25
Ya he solucionado eso . Ahora tengo un problema a la hora de cargar el array.

Creo el array de los caracteres que le indico y posteriormente me indica que caracteres quiero añadir, los meto y ahí falla el programa. Sospecho que puede algún error en la línea:
char[] vect = entrada.nextLine().toCharArray();
myvector.rellenaVector(vect);

pero la verdad que no se.

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
Imágen de perfil de David

llamar a métodos desde el main

Publicado por David (7 intervenciones) el 25/09/2015 20:00:05
No lo probé así que debes probarlo.

Suerte

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import java.util.Scanner;
 
 
public class Texto {
 
	static Scanner vec= new Scanner(System.in);
 
	public static char [] vector;
// 1 crear array con n elementos
	public void generaVector(int posiciones){
		vector = new vector[posiciones];
	}
/* 
	public Texto (int posiciones){
		vector = new char [posiciones];
		for(int x=0;x<posiciones;x++){
			System.out.println ("Introduce datos:");
			String s= vec.nextLine();
			vector = s.toCharArray(); 
 //toCharArray covierte la cadena string "s" a vector de caracteres ej "palo" -> {'p', 'a', 'l', 'o'}
			}
 
 
	}
*/
//2 agregar datos
	public void agregaElementos(){
	System.out.println ("Insertar caracter:");
		for (int x=0;x<vector.length; x++){
				char s = vec.nextLine(); //suponiendo esta linea ingresa por valores por teclado
				vector[x]=s;
		}
	}
 /*
	 public static void Incrementar ( char a){
		System.out.println ("Indica el carácter que quieres introducir:");
		for (int x=0;x<vector.length; x++){
			if (vector[x] != ' '){
				String s = vec.nextLine();
				vector = s.toCharArray();
				vector[x]=vector[a];
			}
 
		}
	}
 */
//3 contar vocales
 	public static void contador(){
		 int cont =0;
		 for (int x=0;x<vector.length; x++){
		 	switch(vector[x]){
		 		case 'a':
		 		case 'e':
		 		case 'i':
		 		case 'o':
		 		case 'u':
		 		case 'A':
		 		case 'E':
		 		case 'I':
		 		case 'O':
		 		case 'U':
		 			cont++;
		 			break;
		 	}
		 }
		 System.out.println ("El vector contiene" + cont + "vocales");
	 }
/*	 
	 public static void contador(){
		 int cont =0;
		 for (int x=0;x<vector.length; x++){ //solo cuentas minúsculas
			 if ((vector[x] == 'a') || (vector[x] == 'e') || (vector[x] == 'i') || (vector[x] == 'o') || (vector[x] == 'u')){
				 cont ++;
			 }
		 }
		 System.out.println ("El vector contiene" + cont + "vocales");
	 }
 */
 // 4 imprimir vector
 	 public static void imprimir(){
		 for (int i=0; i<vector.length;i ++){
		  System.out.println ("El valor del vector es ".vector[i]);
		 }
 
	 }
/*
	 public static void imprimir(){
		 for (int i=0; i<posiciones;i ++){
		  System.out.println ("El valor del vector es".vector[i]);
		 }
 
	 }
*/
	 public static void main(String args[]){
		Scanner tecl= new Scanner(System.in);
		int a;
		System.out.println ("De cuantas posiciones quieres crear el array:");
		//a = tecl.nextInt();
		a = Integer.parseInt(tecl.nextInt());
		generaVector(a);
 		agregaElementos();
 		contador();
 		imprimir();
	 }
}
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

llamar a métodos desde el main

Publicado por Rafa (13 intervenciones) el 28/09/2015 18:57:40
Muchas gracias David.

Me has ayudado un monton, me gusta la manera de implementar del metodo contador() con el case.

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