是否可以从Java中的方法返回多个值?

Mic*_*ald 9 java variables return

我正在使用模拟器来玩掷骰子,我试图从同一个方法返回两个值(或者我想要).

当我写回复语句时,我只是尝试将"&"编译并正确运行; 但我无法访问第二个返回值.

public static int crapsGame(){
  int myPoint;
  int gameStatus = rollagain;
  int d1,d2;
  int rolls=1;

  d1 = rollDice();
  d2 = rollDice();
  switch ( d1+d2 ) {
    case 7: 
    case 11:
      gameStatus = win;
      break;
    case 2: 
    case 3: 
    case 12:
      gameStatus = loss;
      break;
    default:
      myPoint = d1+d2;
      do {
        d1=rollDice();
        d2=rollDice();
        rolls++;
        if ( d1+d2 == myPoint )
          gameStatus = win;
        else if ( d1+d2 == 7 )
          gameStatus = loss;
       } while (gameStatus == rollagain);
  } // end of switch
  return gameStatus & rolls;
}
Run Code Online (Sandbox Code Playgroud)

当我返回值为:

gameStatus=crapsGame();
Run Code Online (Sandbox Code Playgroud)

它恰当地设置了变换的胜负,但如果我尝试的东西就像遵循以下声明一样简单:

rolls=crapsGame();
Run Code Online (Sandbox Code Playgroud)

它被赋予与gamestatus相同的值... 0或1(输赢).我能以任何方式访问第二个返回值吗?或者有一种完全不同的方式去做吗?

rge*_*man 11

创建自己的值保持器对象以保存两个值,然后返回它.

return new ValueHolder(gameStatus, rolls);
Run Code Online (Sandbox Code Playgroud)

可以返回一个具有多个值的数组,但这是神秘的,它对可读性没有任何作用.理解这意味着什么更容易...

valueHolder.getGameStatus()
Run Code Online (Sandbox Code Playgroud)

这意味着什么.

intArray[0]
Run Code Online (Sandbox Code Playgroud)


Fra*_*eza 5

返回gameStatus & rolls意味着"返回bitwise和gameStatus并滚动",这可能不是你想要的

你有一些选择:

  • 返回一个数组
  • 创建一个类,该类使用每个值的属性表示响应并返回实例
  • 使用众多java集合中的一个来返回值(可能是列表或映射)