2012-09-29 126 views
0

可能重复:
How to return multiple objects from a Java method?的java:从方法返回多个值

可以说N = A + B; 对于数字N我想要生成所有可能的值a和b。如果N = 7a和b是(1 + 6),(2 + 5),(3 + 4),则如 。

我已经在方法中编写了这个逻辑。

static void sumofNum(int N){ 

     for(int a=1; a<N; a++){ 
       //a+b=N 
       int b = N-a; 
       System.out.println(a+","+b); 
       int next =a+1; 
       if(next==b | a==b) 
        return; 
     } 
    } 

我想从这个方法返回(1,6),(2,5),(3,4)。接下来对于任何N,可以有更多的(a,b)组合从该方法返回。

回答

1

如果你想返回他们作为整数,定义一个包含两个整数(或滥用点,如我在下面所做的)的对象并返回这些对象的列表。如果你定义了你自己的对象,只需用它替换点即可。

static ArrayList<Point> sumofNum(int N){ 
    ArrayList<Point> result = new ArrayList<Point>(); 
    for(int a=1; a<N; a++){ 
      //a+b=N 
      int b = N-a; 
     System.out.println(a+","+b); 
     int next =a+1; 
     if(next==b | a==b) 
      result.add(new Point(a,b)); 
     } 
    return result; 
    } 

你可以得到你的结果从列表中有:

results = sumofNum(7); 
int a = results.get(0).x; //a = 1 
int b = results.get(0).y; //b = 6 
3

返回一个List<String>(假设"(1,6)"将被存储为String)。使用的List的实施方式的一个,如ArrayList,构建列表:

static List<String> sumofNum(int N) 
{ 
    List<String> result = new ArrayList<String>(); 

    for(int a=1; a<N; a++) 
    { 
     int b = N-a; 
     result.add("(" + a + "," + b + ")"); 
     int next =a+1; 
     if(next==b || a==b) 
      return result; 
    } 
    return result; 
} 
+0

为什么不创建新的类型,而不是使用的**串**? –

+0

@罗伊林,你为什么需要? – hmjd

+1

读取代码非常简单,如果您想获取2个整型结果,则不需要额外的_split/parse_字符串。 –

0
Consider the nos as (1,6),(2,5),(3,4) 

-立即返回一个ArrayList<String>其中载String形式的每个值作为 “1,6”,“2 ,5“,”3,4“。

-当收到返回的ArrayList,然后用split()方法","作为分隔符来获得1和6出“1,6”等....

1

在面向(并且也是功能)的对象编程的风格,你可以将结果传递给消费者的避免存储的开销导致收藏或列表。

实施例:

static void sumofNum(int N){ 
    for (int a=1; a<N; a++){ 
    //a+b=N 
    int b = N-a; 
    consumer.consume(a,b); 
    int next =a+1; 
    if (next==b || a==b) 
     return; 
    } 
} 

[代码的进一步改进是可能的(例如避免内如果和返回),...]