2010-09-06 48 views
5

Tôi đang viết một hàm và tôi muốn nó trả về hai số nguyên làm kết quả. Tuy nhiên, tôi không thể làm điều đó. Có ai có thể giúp tôi không? Đây là tôi bắn tốt nhấtBắt một hàm để trả về hai số nguyên

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

Trả lời

11

Bạn có thể có phương pháp trả về một mảng của int:

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

Ngoài ra, lưu ý rằng trong "không có câu trả lời" trường hợp, phương pháp này ** phải ** trả về một sản phẩm nào 'int []'. –

+0

"phải"? Nó không thể trả về null hoặc ném một ngoại lệ? – Gabe

+0

@Gabe - đúng - nhưng tại sao anh ta lại gọi println? –

-4

tại sao bạn muốn làm điều này? và nếu bạn có nhu cầu như thế này, bạn không thể thay đổi kiểu trả về thành chuỗi, vì trong trường hợp chuỗi bạn có thể có dấu tách giữa hai giá trị sẽ giúp bạn trích xuất các giá trị .... nói 10 & 30,

Tôi đồng ý đây là cách giải quyết sai ... tôi giả định rằng có giới hạn gắn bó với kiểu dữ liệu nguyên thủy

+0

-1 lạm dụng các loại Đối tượng. Sử dụng Pair thay vì – bwawok

+1

'String' sẽ là giải pháp tồi tệ nhất mà tôi có thể nghĩ đến. Các 'Pair' và' int [] 'đã đề cập là các giải pháp thích hợp cho vấn đề OPs. –

4

Tạo một lớp bên trong nhỏ có hai số nguyên.

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

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

Bạn tạo phiên bản của lớp và trả lại thay thế.

+1

Điều này không xử lý trường hợp khi chỉ 's' được trả về. – strager

+4

strager là đúng; bạn nên sử dụng 'Integer' thay vì' int' để chúng có thể rỗng. – Gabe

+0

Đã chỉnh sửa để sử dụng Số nguyên. Cả hai đều đúng, tôi đã bỏ lỡ trường hợp đó. – Jes

5

Tạo lớp "cặp" và trả lại.

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

'T' và' Y' là gì? – Gabe

+0

'T' và' Y' là trình giữ chỗ chung cho các loại cụ thể. Trong trường hợp OPs cả hai sẽ là 'Integer' –

+0

' T' là viết tắt của "type", 'V' là viết tắt của" value ",' E' là viết tắt của "element", nhưng tôi không biết ý nghĩa 'Y' là viết tắt của và không chắc chắn rằng 'T' là viết tắt của' Y'. Chúng chỉ là những chữ cái được chọn ngẫu nhiên, hay chúng có nghĩa là một số từ dài hơn? – Gabe

2

Đối với vấn đề cụ thể này, vì câu trả lời luôn luôn trả s:

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

bạn chỉ có thể trả về giá trị 2. Tôi sử dụng 0 để chỉ "chỉ s" vì trường hợp đầu tiên (if (s==g)) có thể được coi là if (s+0==g). Sử dụng giá trị sentinel khác với 0 cho điều này, nếu cần.

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

Nếu không có ngoại lệ được ném, sau đó s luôn luôn là kết quả đầu tiên:

try { 
    int result1 = s; 
    int result2 = calc(s, b, c, d, g); 
} catch (IndexOutOfBoundsException ex) { 
    System.out.println("No Answer"); 
} 
Các vấn đề liên quan