ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我可以使方法返回调用方方法吗?

2019-11-18 04:10:32  阅读:148  来源: 互联网

标签:return java


我想干掉这段代码:

YourConsultant.GameState gameState() {

    for (int i = 0; i < 3; i++) {
        // an 'xxx' column returns 'x', an 'ooo' returns 'o', a mixed row returns '0'
        char c = areTheSame(board[i][0], board[i][1], board[i][2]);
        if (c == 'x') {return YourConsultant.GameState.WON_BY_X;}
        else if (c == 'o') {return YourConsultant.GameState.WON_BY_O;}
    }

    for (int i = 0; i < 3; i++) {
        char c = areTheSame(board[0][i], board[1][i], board[2][i]);
        if (c == 'x') {return YourConsultant.GameState.WON_BY_X;}
        else if (c == 'o') {return YourConsultant.GameState.WON_BY_O;}
    }

    {
        char c = areTheSame(board[0][0], board[1][1], board[2][2]);
        if (c == 'x') {return YourConsultant.GameState.WON_BY_X;}
        else if (c == 'o') {return YourConsultant.GameState.WON_BY_O;}
    }

    {
        char c = areTheSame(board[0][2], board[1][1], board[2][0]);
        if (c == 'x') {return YourConsultant.GameState.WON_BY_X;}
        else if (c == 'o') {return YourConsultant.GameState.WON_BY_O;}
    }

    ...
}

为此,我想写一个简短的方法来做到这一点:

        if (c == 'x') {return YourConsultant.GameState.WON_BY_X;}
        else if (c == 'o') {return YourConsultant.GameState.WON_BY_O;}

但这会使新方法返回.我想我不能做类似super.return的事情?我可以再次检查返回值,但不会使我的代码干燥.你有什么建议? (对不起,如果以前有人问过,我发现这个很难搜索)

更新:我不能简单地传递值,因为如果areTheSame == 0,那么我不应该返回(还).

更新2:我修改了代码,用这两行替换每行:

        if (c == 'x' || c == 'o')  return declareWinner(c);

它工作正常,并且功能相同.仍然有一些重复,但更好的IMO.

解决方法:

不可以,方法不能为其调用者执行返回,但是调用者可以直接返回被调用方法返回的值.看来这不会满足您的目的,但是,因为您只想有条件地返回.

我会更深入地解决这个问题.请注意,您的四个节有多相似:有条件的收益不只是一点点潮湿.您想要执行的测试数量很少,无法枚举,因此您可以考虑以下方面的内容:

private final static int[][][] TRIPLES = new int[][][] {
    { {0, 0}, {0, 1}, {0, 2} },
    { {1, 0}, {1, 1}, {1, 2} },
    { {2, 0}, {2, 1}, {2, 2} },
    { {0, 0}, {1, 0}, {2, 0} },
    { {0, 1}, {1, 1}, {2, 1} },
    { {0, 2}, {1, 2}, {2, 2} },
    { {0, 0}, {1, 1}, {2, 2} },
    { {0, 2}, {1, 1}, {2, 0} },
};

YourConsultant.GameState gameState() {

    for (int i = 0; i < TRIPLES.length; i++) {
        char c = areTheSame(
            board[TRIPLES[i][0][0]][TRIPLES[i][0][1]],
            board[TRIPLES[i][1][0]][TRIPLES[i][1][1]],
            board[TRIPLES[i][2][0]][TRIPLES[i][2][1]]
        );
        if (c == 'x') {
            return YourConsultant.GameState.WON_BY_X;
        } else if (c == 'o') {
            return YourConsultant.GameState.WON_BY_O;
        }
    }

    return YourConsultant.GameState.NO_WINNER;
}

标签:return,java
来源: https://codeday.me/bug/20191118/2025520.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有