C sharp - ayuda necesito pasar código a java urgente

 
Vista:
sin imagen de perfil

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#:


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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder