2010-09-06 24 views
5

Estoy escribiendo una función y quiero que dos devuelvan dos enteros como resultados. Sin embargo, no puedo lograr que haga esto. ¿Alguien podría ayudarme? Aquí está mi mejor tiroObteniendo una función para devolver dos enteros

public static int calc (int s, int b, int c, int d, int g) 
    { 
     if (s==g) 
      return s; 
     else if (s+b==g) 
       return s && b; 

     else if (s + c==g) 
       return s && c; 

     else if (s+d==g) 
       return s && d; 

     else 
      System.out.println("No Answer");      
    } 

Respuesta

11

Usted podría tener el método de devolver una matriz de int:

public static int[] calc (int s, int b, int c, int d, int g) 
+0

Además, cabe destacar que en el caso de "no respuesta", el método tiene que ** ** devolver un vacío 'int []'. –

+0

"tiene que" ¿No puede devolver nulo o lanzar una excepción? – Gabe

+0

@Gabe - cierto, pero ¿por qué iba a llamar a println? –

-4

¿por qué quieres hacer esto? y si tiene alguna necesidad como esta, no puede cambiar su tipo de devolución a cadena, porque en el caso de una cadena puede tener un separador entre dos valores que le ayudará a extraer los valores .... decir 10 & 30,

Acepto que esta es una forma incorrecta de resolver ... asumí que hay una limitación de apego al tipo de datos primitivo

+0

-1 abuso de tipos de objetos. Use un par en su lugar – bwawok

+1

'String' sería la peor solución que podría pensar. Los '' Pair' y 'int []' ya mencionados son las soluciones apropiadas para el problema de OPs. –

4

Crea una clase interna pequeña que tenga dos enteros.

private static class TwoNumbers { 
    private Integer a; 
    private Integer b; 

    private TwoNumbers(Integer a, Integer b) { 
     this.a = a; 
     this.b = b; 
    } 
} 

Crea una instancia de la clase y la devuelve en su lugar.

+1

Esto no maneja el caso cuando solo se devuelve 's'. – strager

+4

strager es correcto; deberías estar usando 'Integer' en lugar de' int' para que puedan ser nulos. – Gabe

+0

Editado para usar Entero. Ambos tienen razón, me perdí ese caso. – Jes

5

Haz una clase de "par" y devuélvela.

public class Pair<T,Y> 
{ 
    public T first; 
    public Y second; 
    public Pair(T f, Y s) 
    { 
     first = f; 
     second = s; 
    } 
} 
+0

¿Qué significan 'T' y' Y'? – Gabe

+0

'T' y' Y' son marcadores de posición genéricos para tipos específicos. En el caso de OPs ambos serían 'Integer' –

+0

' T' significa "tipo", 'V' significa" valor ",' E' significa "elemento", pero no tengo idea de qué 'Y' representa , y no estoy seguro de que 'T' represente en el contexto de 'Y'. ¿Son simplemente letras elegidas al azar, o representan algunas palabras más largas? – Gabe

2

Para este problema específico, ya que la respuesta siempre devuelve s:

.... 
    return s; 
.... 
    return s && b; 
.... 
    return s && c; 
.... 
    return s && d; 
.... 

sólo podría devolver el segundo valor. Uso 0 para indicar "solo s" ya que el primer caso (if (s==g)) podría considerarse como if (s+0==g). Use un valor centinela diferente de 0 para esto, si es necesario.

public static int calc (int s, int b, int c, int d, int g) 
{ 
    if (s==g) 
     return 0; 
    else if (s+b==g) 
      return b; 
    else if (s+c==g) 
      return c; 
    else if (s+d==g) 
      return d; 
    else { 
     // System.out.println("No Answer"); 

     // Probably better to throw or return a sentinel value of 
     // some type rather than print to screen. Which way 
     // probably depends on whether "no answer" is a normal 
     // possible condition. 
     throw new IndexOutOfBoundsException("No Answer"); 
    } 
} 

Si se lanza una excepción, entonces s es siempre el primer resultado:

try { 
    int result1 = s; 
    int result2 = calc(s, b, c, d, g); 
} catch (IndexOutOfBoundsException ex) { 
    System.out.println("No Answer"); 
} 
Cuestiones relacionadas