黑马程序员技术交流社区

标题: 求基础好的人解答,怎么在一个方法里面返回一对值啊。 [打印本页]

作者: 小Zeor………    时间: 2014-2-22 11:00
标题: 求基础好的人解答,怎么在一个方法里面返回一对值啊。
比如我想建立一个方法
  1. public .... LookFor(int x, int y)
  2. {
  3.         x++;y--;
  4.         return x,y;
  5. }
  6. 可以这么做么?或者不可以提个思路也行
复制代码

作者: 廉伟杰    时间: 2014-2-22 11:05
返回一个数组的地址不就行了
作者: 苏小惠    时间: 2014-2-22 11:10
个人感觉不行:如果要返回多个值,要么用数组,方法调用完后原数组元素发生值改变 或者 如果这对值有对应关系,可用后期的键值对集合map。因为返回多个值,如何定义接收多个返回值  最多:int value = lookFor(x,y)。
作者: 小Zeor………    时间: 2014-2-22 11:38
廉伟杰 发表于 2014-2-22 11:05
返回一个数组的地址不就行了

怎么写返回数组的值?
public int[][] A(int[][] a[x][y])
{
      return  a[x][y];
}
你是这个意思么?
不能编译的
作者: 廉伟杰    时间: 2014-2-22 11:44
小Zeor……… 发表于 2014-2-22 11:38
怎么写返回数组的值?
public int[][] A(int[][] a[x][y])
{

亲,是返回数组的地址啊,并不是a【】【】
作者: 榨菜    时间: 2014-2-22 12:15
可以返回一个数组   或者一个对象。  里面都保存着 x, y
作者: 徐芾清    时间: 2014-2-22 13:27
哥呀,这样不就行了:
public static void main(String[] args){
    int x = 2, y = 5;
    int[] ints = {x,y};
    System.out.println(Arrays.toString(ints));
    ints = getxy(ints);
    System.out.println(Arrays.toString(ints));
}
public int[] getxy(int[] ints){
    int[0]++;
    int[1]--;
    return ints;
}
作者: 浅一蓝    时间: 2014-2-22 14:41
返回一个数组啊,或者字符串连接起来 然后接到后截取也行的。
  public String[] add(String name, String n){
     String[] arr = new String[2];
     arr[0] = name;
     arr[1] = n;
     return arr;
  }
作者: 赵永生    时间: 2014-2-22 15:08
别用数组 数组固定长度了,也别用Map ,Map还得根据键取值。如果不区分的话 你可以直接用数组列表 ArrayList 这个比较适合的。
作者: wdtdcm    时间: 2014-2-22 20:14
本帖最后由 wdtdcm 于 2014-2-22 20:43 编辑

跟我上次的问题差不多,可以开个数组存数据,思路如下图


可以这样实现
  1. class t1{
  2.         public static void main(String[] args){
  3.                 int[] arr=new int[2];
  4.                 int x=1;
  5.                 int y=2;
  6.                
  7.                 Fangfa.change(arr,x,y);
  8.                 x=arr[0];
  9.                 y=arr[1];
  10.                 System.out.println(x+ " "+y);
  11.         }

  12. }
  13. class Fangfa{
  14.         static void change(int[] arr,int x, int y){
  15.                 arr[0]=++x;
  16.                 arr[1]=--y;
  17.         }
复制代码




作者: 迦罗叶    时间: 2014-2-22 21:07
可以用另外一种容器来储存StringBuffer
  1. class Demo {
  2.         public static void main(String[] args) {       
  3.                 haha(10,8);
  4.         }
  5.         public static void haha(int x,int y) {
  6.                 StringBuffer sb = new StringBuffer();
  7.                 sb.append(x);
  8.                 sb.append(y);
  9.                 System.out.println(sb);
  10.         }
  11. }
复制代码


作者: 严旭晟    时间: 2014-2-22 21:22
楼主想用一个方法返回多个值,对值的类型有要求吗?
#1:同类型,可用数组,见楼上答复;
另外也可以用Hashtable,见代码如下:
  1. import java.util.*;

  2. /*
  3. * 利用Hashtable,实现一个函数返回多个值
  4. * [b]建议修改本程序HashMap,避免安全警告![/b]
  5. * Created by Ian Feyman
  6. * */
  7. public class Test
  8. {

  9.    public static Hashtable Lookfor(String[] key,int x,int y,int z)
  10.    {
  11.            Hashtable<String,Integer> retValue = new
  12.                                        Hashtable<String,Integer>();
  13.         
  14.         //进行操作
  15.         retValue.put(key[1],x);
  16.         retValue.put(key[2],y);
  17.         retValue.put(key[3],z);

  18.            return retValue;

  19.    }
  20.    public static void ShowResult(Hashtable htable)
  21.    {
  22.        System.out.println("Value1: "+htable.get("one")+
  23.                          "\nValue2: "+ htable.get("two")+
  24.                          "\nValue3: "+htable.get("three"));
  25.    }
  26.    public static void main(String[] args)
  27.    {
  28.         Hashtable<String,Integer> multiValue = new  
  29.                                      Hashtable<String,Integer>();

  30.         String[] str = new String[6];
  31.         str[1] = "one";
  32.         str[2] = "two";
  33.         str[3] = "three";

  34.         multiValue =  Lookfor(str,100,200,300);
  35.         ShowResult(multiValue);
  36.    }
  37. }
复制代码


作者: ↑↓ME→←    时间: 2014-2-22 21:26
看了这么多,用个字符串表示不就可以了吧,中间用一个逗号隔开,取出来再截取!
作者: 严旭晟    时间: 2014-2-22 23:13
#2-1:不同类型,可以返回类,通过类封装不同的属性值见代码如下:
  1. import java.lang.String;

  2. class Result
  3. {
  4.    private char value1;
  5.    private int  value2;
  6.    private float value3;
  7.    private String value4;

  8.    public char getValue1()
  9.    {
  10.      return value1;
  11.    }
  12.    public void setValue1(char value)
  13.    {
  14.      value2 = value;
  15.    }
  16.    
  17.    public int getValue2()
  18.    {
  19.      return value2;
  20.    }
  21.    public void setValue2(int value)
  22.    {
复制代码
//或者结构体、union体等也可


作者: 严旭晟    时间: 2014-2-22 23:15
以上代码均可正确运行,
#2-2:不同类型,利用ref和out型参数,间接返回(略)
作者: 张继鲁    时间: 2014-2-22 23:18
数组、Map、ArrayList都可以的!根据自己的习惯而定看你想用哪个方法了。
作者: 严旭晟    时间: 2014-2-22 23:44
严旭晟 发表于 2014-2-22 23:15
以上代码均可正确运行,
#2-2:不同类型,利用ref和out型参数,间接返回(略) ...

这里有问题,把java和C#搞混了
若是C#的话,采用ref和out型参数很方便,间接返回
在java中,基本类型作为参数都传值
还可利用全局变量,思路就这么多了
作者: 山治0712    时间: 2014-2-22 23:53
我也是想到的数组
作者: flying    时间: 2014-2-23 00:04
将两个值封装在对象里面
public class A {
        Object x;
        Object y;
        public Object getX(){
                return x;
        }
        public Object getY(){
                return y;
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2