2010-09-06 18 views
5

Piszę funkcję i chcę, aby dwie zwracały dwie liczby całkowite jako wyniki. Jednak nie mogę tego zrobić. Czy ktoś mógłby mi pomóc? Oto mój najlepszy strzałUzyskiwanie funkcji zwracania dwóch liczb całkowitych

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");      
    } 

Odpowiedz

11

Można mieć metoda zwraca tablicę int:

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

Należy również pamiętać, że w „Brak odpowiedzi” sprawy, metoda ** ** musi powrócić pusty 'int []'. –

+0

"musi"? Czy nie może zwrócić wartości null lub rzucić wyjątku? – Gabe

+0

@Gabe - prawda - ale dlaczego miałby dzwonić do println? –

-4

Dlaczego chcesz to zrobić? a jeśli masz taką potrzebę, nie możesz zmienić typu zwracanego na ciąg, ponieważ w przypadku łańcucha możesz mieć separator między dwiema wartościami, które pomogą ci w wyodrębnianiu wartości ... powiedzmy 10 & 30,

Zgadzam się, że jest to niewłaściwy sposób rozwiązywania ... założyłem, że istnieje ograniczenie przywierania do pierwotnego typu danych:

+0

-1 nadużycie typów obiektów. Zamiast tego używaj pary zamiast " – bwawok

+1

" String "byłoby najgorszym rozwiązaniem, jakie mogłem wymyślić. Wspomniane wcześniej "Pair" i "int []" są odpowiednimi rozwiązaniami problemu OP. –

4

Utwórz małą wewnętrzną klasę, która ma dwie liczby całkowite.

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

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

Utworzono instancję klasy i zwrócono ją.

+1

Nie obsługuje to przypadku, gdy zwracane jest tylko 's'. – strager

+4

Program strager ma rację; powinieneś używać 'Integer' zamiast' int', aby mogły mieć wartość NULL. – Gabe

+0

Edytowane w celu użycia liczby całkowitej. Obaj macie rację, tęskniłem za tą sprawą. – Jes

5

Utwórz klasę "pair" i zwróć ją.

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

Co oznaczają litery "T" i "Y"? – Gabe

+0

'T' i' Y' są Ogólnymi symbolami zastępczymi dla określonych typów. W przypadku OPs oba miałyby postać "Integer" –

+0

'T' oznacza" typ "," V "oznacza" wartość "," E "oznacza" element ", ale nie mam pojęcia, co oznacza" Y " i nie jestem pewien, że 'T' oznacza w kontekście' Y'. Czy są to po prostu losowo wybrane litery, czy też oznaczają dłuższe słowa? – Gabe

2

Dla tego konkretnego problemu, ponieważ odpowiedź zawsze zwraca s:

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

można po prostu wrócić 2nd wartość. Używam 0, aby wskazać "just s", ponieważ pierwszy przypadek (if (s==g)) może być traktowany jako if (s+0==g). Jeśli to konieczne, użyj innej wartości wartownika niż 0.

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"); 
    } 
} 

Jeśli nie jest wyjątek, wtedy s jest zawsze pierwszy wynik:

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