Java - Separar en clases codigo estructurado

 
Vista:
sin imagen de perfil

Separar en clases codigo estructurado

Publicado por Alejandro (14 intervenciones) el 15/08/2016 20:05:57
Hola buenas día, vengo con una duda la cual no he podido resolver.
Se trata de separar este codigo en varias clases. Dejando solo los ciclos for

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
import java.util.Scanner;
 
public class InsertionSort {
	public static void main(String [] args){
 
		int elec = 0;
		int key = 0;
		int i = 0;
		int count = 0;
		boolean ok = false;
 
		while (!ok){
			Scanner in = new Scanner(System.in);
			System.out.println("Inserte numero de datos a evaluar: ");
			try{
				elec=in.nextInt();
				ok = true;
			} catch (Exception ex){
				System.out.println("No esta ingresando un entero.");
			}
		}
		System.out.println("\n");
 
		int A[]= new int [elec];
 
		for(int num = 0; num < A.length; num++){
			A[num] = (int)(Math.random()*100+1);
			System.out.println(A[num]);
		}
		System.out.println("\n");
		for(int j = 1; j < A.length; j++){
			count+=2;
			key = A[j];
			i = j-1;
			while( i >= 0 && A[i] > key){
				count+=2;
				A[i+1] = A[i];
				i-=1;
				count+=2;
			}
			A[i+1] = key;
			count+=2;
		}
		System.out.println("contador Insertion: "+count);
		for(i = 0; i < A.length; i++){
			System.out.println(A[i]);
		}
	}
}
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 xve
Val: 686
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Separar en clases codigo estructurado

Publicado por xve (345 intervenciones) el 15/08/2016 21:59:35
Hola Alejandro, no me queda muy claro que parte quieres poner en una clase externa, por lo que te he extraido la solicitud del valor...

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
import java.util.Scanner;
 
public class InsertionSort {
	public static void main(String [] args){
 
		int elec = 0;
		int key = 0;
		int i = 0;
		int count = 0;
		boolean ok = false;
 
		SolicitarNumero objSN=new SolicitarNumero();
		elec=objSN.Solicitar();
 
		System.out.println("\n");
 
		int A[]= new int [elec];
 
		for(int num = 0; num < A.length; num++){
			A[num] = (int)(Math.random()*100+1);
			System.out.println(A[num]);
		}
		System.out.println("\n");
		for(int j = 1; j < A.length; j++){
			count+=2;
			key = A[j];
			i = j-1;
			while( i >= 0 && A[i] > key){
				count+=2;
				A[i+1] = A[i];
				i-=1;
				count+=2;
			}
			A[i+1] = key;
			count+=2;
		}
		System.out.println("contador Insertion: "+count);
		for(i = 0; i < A.length; i++){
			System.out.println(A[i]);
		}
	}
}
 
class SolicitarNumero {
	public int Solicitar() {
		int elec=0;
 
		while (true){
			Scanner in = new Scanner(System.in);
			System.out.println("Inserte numero de datos a evaluar: ");
			try{
				elec=in.nextInt();
				return elec;
			} catch (Exception ex){
				System.out.println("No esta ingresando un entero.");
			}
		}
	}
}

Te sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Carlos Castro

Separar en clases codigo estructurado

Publicado por Carlos Castro (54 intervenciones) el 15/08/2016 22:50:49
Podría ser así, creamos una clase Numero:

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
public class Numero {
   private int A[];
   private int X;
   public Numero(int elec){
      A= new int [elec];
      X=0;
   }
 
   public void setNumero(int num){
       A[X]=num;
       X=X+1;
   }
 
   public int[] getNumero(){
       return A;
   }
 
   public void ordenamiento(){
       int count = 0;
       int key = 0;
       	int i = 0;
       for(int j = 1; j < A.length; j++){
			count+=2;
			key = A[j];
			i = j-1;
			while( i >= 0 && A[i] > key){
				count+=2;
				A[i+1] = A[i];
				i-=1;
				count+=2;
			}
			A[i+1] = key;
			count+=2;
		}
   }
}

El programa principal queda 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
import java.util.Scanner;
 
public class InsertionSort {
 
    public static void main(String[] args) {
       int elec = 0;
	boolean ok = false;
        while (!ok){
			Scanner in = new Scanner(System.in);
			System.out.println("Inserte numero de datos a evaluar: ");
			try{
				elec=in.nextInt();
				ok = true;
			} catch (Exception ex){
				System.out.println("No esta ingresando un entero.");
			}
		}
		System.out.println("\n");
                 Numero numeros=new Numero(elec);
		for(int num = 0; num < elec; num++){
                       int nume=(int)(Math.random()*100+1);
			numeros.setNumero(nume);
			System.out.println(nume);
		}
		System.out.println("\n");
                numeros.ordenamiento();
                int A[]=numeros.getNumero();
 
		//System.out.println("contador Insertion: "+count);
		for(int i = 0; i < A.length; i++){
			System.out.println(A[i]);
		}
	}
}

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

Separar en clases codigo estructurado

Publicado por Tom (1831 intervenciones) el 16/08/2016 17:58:47
Para cosas tan pequeñas no merece la pena, pero algo como esto quedaría bien para futuras ampliaciones:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ListGenerator {
	/* */
	public static int getRandomInt(int max) {
		return (int)(Math.random() * max + 1);
	}
	/* */
	public static int[] getRandomIntList(int count, int max) {
		int	ret[] = new int[count];
		for(int i = 0; i < count; i++) {
			ret[i] = getRandomInt(max);
		}
		return ret;
	}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Sorter {
	/* */
	public static int[] insertionSort(int ar[]) {
		for(int i = 1; i < ar.length; i++) {
			int value = ar[i];
			int j = i - 1;
 
			while(j >= 0 && ar[j] > value) {
				ar[j + 1] = ar[j];
				j--;
			}
			ar[j + 1] = value;
		}
		return ar;
	}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class TestInsertionSort {
	/* */
	public static void main(String args[]) {
		if(args.length > 0) {
			try {
				int count = Integer.parseInt(args[0]);
				int max = Integer.parseInt(args[1]);
				int	testArray[] = ListGenerator.getRandomIntList(count, max);
				int	sortedArray[] = Sorter.insertionSort(testArray);
 
				/* show arrays to user ... */
 
				System.exit(0);
			} catch(Exception ex) {
			}
		}
		System.out.println("Pase como parámetros el número de elementos para el test y el valor máximo de cada uno");
		System.exit(1);
	}
}

Ah! Dado que se realizan las modificaciones directamente sobre el array original, no sería necesario que insertionSorter retornara nada ...
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