
ayuda necesito pasar código a java urgente
Publicado por John Anderson (1 intervención) el 09/04/2014 03:23:31
Hola buenas noches, tengo inquietud con el siguiente codigo, debo hacer un trabajo para la U y la verdad nunca he programa en c# y debo realizarlo en java se trata de un algoritmo mediante la técnica divide y vencerás de una subsuma, encontré la solución pero no entiendo algunos métodos, espero que alguien me colabore.
codigo c#:
Esto es lo que tengo en java:
codigo c#:
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
public struct Secuencia {
public Secuencia(int i, int l, int s) {
this.inicio = i;
this.longitud = l;
this.suma = s;
}
public int inicio;
public int longitud;
public int suma;
}
public static Secuencia SumaMaxima(int[] lista, int inf, int sup) {
Secuencia result = new Secuencia(sup, 1, lista[sup]);
if(inf < sup) {
int mitad = (inf + sup) / 2;
Secuencia r1 = SumaMaxima(lista, inf, mitad);
Secuencia r2 = SumaMaxima(lista, mitad + 1, sup);
if(r1.suma >= r2.suma) {
result = r1;
} else {
result = r2;
}
Secuencia r3 = r1;
int final = r2.inicio + r2.longitud;
for(int i = r1.inicio + r1.longitud; i < final; i++) {
r3.longitud++;
r3.suma += lista[i];
if(r3.suma >= result.suma) {
result = r3;
}
}
r3 = r2;
final = r1.inicio + r1.longitud;
for(int i = r2.inicio - 1; i >= final; i--) {
r3.inicio--;
r3.longitud++;
r3.suma += lista[i];
if(r3.suma >= result.suma) {
result = r3;
}
}
}
return result;
}
public static Secuencia SumaMaxima(int[] lista) {
if(lista.Length > 0) {
return SumaMaxima(lista, 0, lista.Length - 1);
} else {
return new Secuencia(-1, 0, 0);
}
}
public static void MostrarResultado(int[] lista,
Secuencia resultado) {
Console.WriteLine("Lista: " +
lista.Select(x => x.ToString())
.Aggregate((x, xs) => x + " " + xs));
if(resultado.inicio != -1) {
IEnumerable<int> sublista = lista.Skip(resultado.inicio)
.Take(resultado.longitud);
Console.WriteLine("Secuencia: {0}, {1}", resultado.inicio,
resultado.longitud);
Console.WriteLine("Suma: {0}", sublista.Sum());
Console.WriteLine("Sublista: " +
sublista.Select(x => x.ToString())
.Aggregate((x, xs) =>
x + " " + xs));
} else {
Console.WriteLine("No se ha encontrado solución...");
}
}
public static void Resolver(int[] lista) {
Secuencia resultado = SumaMaximaIterativo(lista);
MostrarResultado(lista, resultado);
Console.WriteLine();
resultado = SumaMaxima(lista);
MostrarResultado(lista, resultado);
}
public static void Resolver() {
int[] lista = { 4, -1, 3, -2, 1, 5, -20, 10, -4, 10, -5, 1 };
Resolver(lista);
Console.WriteLine("\n");
int[] lista2 = { 4, -1, 3, -2, 1, 5, -10, 10, -4, 10, -5, 1 };
Resolver(lista2);
Console.WriteLine("\n");
int[] lista3 = { 15, -10, -30, -2, -1, 11, -10, 10, -4, 10,
-5, 1 };
Resolver(lista3);
}
Esto es lo que tengo en java:
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
106
107
108
109
110
111
112
113
114
115
116
117
////////////////// clase secuencia //////////////////////////
package Secuencia;
public class Secuencia {
public Secuencia(int i, int l, int s) {
this.inicio = i;
this.longitud = l;
this.suma = s;
}
public int inicio;
public int longitud;
public int suma;
}
////////////// resto del programa //////////////////////////
package Secuencia;
import java.io.*;
public class sumaAscendente {
public static Secuencia SumaMaxima(int[] lista, int inf, int sup) {
Secuencia result = new Secuencia(sup, 1, lista[sup]);
if(inf < sup) {
int mitad = (inf + sup) / 2;
Secuencia r1 = SumaMaxima(lista, inf, mitad);
Secuencia r2 = SumaMaxima(lista, mitad + 1, sup);
if(r1.suma >= r2.suma) {
result = r1;
} else {
result = r2;
}
Secuencia r3 = r1;
int finalrecorrido = r2.inicio + r2.longitud;
for(int i = r1.inicio + r1.longitud; i < finalrecorrido; i++) {
r3.longitud++;
r3.suma += lista[i];
if(r3.suma >= result.suma) {
result = r3;
}
}
r3 = r2;
finalrecorrido = r1.inicio + r1.longitud;
for(int i = r2.inicio - 1; i >= finalrecorrido; i--) {
r3.inicio--;
r3.longitud++;
r3.suma += lista[i];
if(r3.suma >= result.suma) {
result = r3;
}
}
}
return result;
}
public static void MostrarResultado(int[] lista, sumaAscendente resultado) {
Console imprimir = null;
imprimir = System.console();
imprimir.readLine("Lista: " +lista.Select(x => x.ToString()).Aggregate((x, xs) => x + " " + xs));
if(resultado.inicio != -1)
{
IEnumerable<int> sublista = lista.Skip(resultado.inicio).Take(resultado.longitud);
System.console().WriteLine("Secuencia: {0}, {1}", resultado.inicio, resultado.longitud);
Console.WriteLine("Suma: {0}", sublista.Sum());
Console.WriteLine("Sublista: " +sublista.Select(x => x.ToString()).Aggregate((x, xs) =>x + " " + xs));
}
else {
Console.WriteLine("No se ha encontrado solución...");
}
}
public static void Resolver(int[] lista) {
Secuencia resultado = SumaMaximaIterativo(lista);
MostrarResultado(lista, resultado);
Console.WriteLine();
resultado = SumaMaxima(lista);
MostrarResultado(lista, resultado);
}
public static void Resolver() {
int[] lista = { 4, -1, 3, -2, 1, 5, -20, 10, -4, 10, -5, 1 };
Resolver(lista);
Console.WriteLine("\n");
int[] lista2 = { 4, -1, 3, -2, 1, 5, -10, 10, -4, 10, -5, 1 };
Resolver(lista2);
Console.WriteLine("\n");
int[] lista3 = { 15, -10, -30, -2, -1, 11, -10, 10, -4, 10,
-5, 1 };
Resolver(lista3);
}
public static void main(String[] args) {
// TODO code application logic here
}
}
Valora esta pregunta


0