没有错误只是简化代码

时间:2015-12-08 12:42:04

标签: java

if (user.substring(0, 1).equals("1")) 
{
    if(FirstInt.substring(0,1).equals("0"))
        permissionFor0=permissionFor0+"-";
    else if (FirstInt.substring(0,1).equals("1"))
        permissionFor0=permissionFor0+"r";
    if(FirstInt.substring(1,2).equals("0"))
        permissionFor0=permissionFor0+"-";
    else if (FirstInt.substring(1,2).equals("1"))
        permissionFor0=permissionFor0+"w";
    if(FirstInt.substring(2,3).equals("0"))
        permissionFor0=permissionFor0+"-";
    else if (FirstInt.substring(2,3).equals("1"))
        permissionFor0=permissionFor0+"s";
    System.out.print (permissionFor0+" ");
    if(SecondInt.substring(0,1).equals("0"))
        permissionFor1=permissionFor1+"-";
    else if (SecondInt.substring(0,1).equals("1"))
        permissionFor1=permissionFor1+"r";
    if(SecondInt.substring(1,2).equals("0"))
        permissionFor1=permissionFor1+"-";
    else if (SecondInt.substring(1,2).equals("1"))
        permissionFor1=permissionFor1+"w";
    if(SecondInt.substring(2,3).equals("0"))
        permissionFor1=permissionFor1+"-";
    else if (SecondInt.substring(2,3).equals("1"))
        permissionFor1=permissionFor1+"x";
    System.out.print (permissionFor1+" ");
    if(ThirdInt.substring(0,1).equals("0"))
        permissionFor2=permissionFor2+"-";
    else if (ThirdInt.substring(0,1).equals("1"))
        permissionFor2=permissionFor2+"r";
    if(ThirdInt.substring(1,2).equals("0"))
        permissionFor2=permissionFor2+"-";
    else if (ThirdInt.substring(1,2).equals("1"))
        permissionFor2=permissionFor2+"w";
    if(ThirdInt.substring(2,3).equals("0"))
        permissionFor2=permissionFor2+"-\n";
    else if (ThirdInt.substring(2,3).equals("1"))
        permissionFor2=permissionFor2+"x";
    System.out.print (permissionFor2+"\n");
}

有人可以帮我简化这段代码,使其不那么大。它看起来像我知道的硬编码。这是我的代码的一部分,我不得不复制和粘贴四次,它使代码看起来笨重而且不是很好。我试着看看我是否可以将它扔进一些for循环但是我没有想出任何壮观的东西。

4 个答案:

答案 0 :(得分:0)

我会使用类似的东西:

function getPermissions(s, permissions) {
    var i, r = '';
    for (i = 0; i < 3; i++) {
        if (s[i] === '0') {
            r += '-';
            continue;
        }
        if (s[i] === '1') {
            r += permissions[i];
        }
    }
    return r;
}

// call
getPermissions('001', 'rws')

如果可以更好地呈现数据库,也许可以写得更短。例如,如果我们可以跳过'0'并仅使用'1'

function getPermissions(s, permissions) {
    var i, r = '';
    for (i = 0; i < 3; i++) {
        r += s[i] === '1' ? permissions[i] : '-';
    }
    return r;
}

// call
getPermissions('111', 'rwx')

或者甚至更短一些:

function getPermissions(s, permissions) {
    return permissions.split('').map(function (a, i) {
        return s[i] === '1' ? a : '-';
    }).join('');
}

// call
document.write(getPermissions('001', 'rwx'));

答案 1 :(得分:0)

你可以改写:

    FirstInt.substring(0,1).equals("0")

as

    FirstInt.charAt(0) == '0'

然后你可以重写

    permissionFor0=permissionFor0+"-";

作为

    permissionFor0 += "-";

然后你可以找出一些清晰的重复;例如你有一个看起来像FirstIntSecondIntThirdInt的剪切和粘贴的块。你可以像这样声明一个int数组。

    String[] ints = new String[] {FirstInt, SecondInt, ThirdInt};

然后使用for (i = 0; i < 3; i++)循环替换剪切和粘贴重复。或者使循环体成为您使用FirstIntSecondIntThirdInt作为参数调用的方法。

等等。

如果你(仔细地)对你的代码进行一系列重写,每个人都应用一些简单的重构&#34;转换&#34;并不难做到。

答案 2 :(得分:0)

就像Stultuske已经说过的那样,你可以简单地把它放在一个循环中。我的建议是将大部分变量放在数组(或列表中,以及它如何为您工作):

String[] theInt = new String[]{"", "", ""};
String[] permissionFor = new String[]{"", "", ""};
String[] permissions = new String[]{"r", "w", "x"};

然后你可以像这样简单地使用它们:

    if (user.substring(0, 1).equals("1")) {
        for ( int n = 0; n < theInt.length; n++ ) {
            for (int i = 0; i <= 3; i++) {
                if (theInt[n].substring(i, i + 1).equals("0")) {
                    permissionFor[n] += "-";
                } else if (FirstInt.substring(i, i + 1).equals("1")) {
                    permissionFor[n] += permissions[i];
                }
            }
            System.out.println(permissionFor[n] + " ");
        }
    }

或者您甚至可以使用switch代替if else以获得更好的可读性:

switch (theInt[n].substring(i, i + 1)) {
    case "0": permissionFor[n] += "-"; break;
    case "1": permissionFor[n] += permissions[i];break;
}

答案 3 :(得分:0)

我应该写一个像这样的转换方法:

public String convert(String iPermission, String mask, char falseCharacter){
    String res = "";
        for(int i = 0; i < iPermission.length(); i++)
            if(iPermission.charAt(i) == '1')
                res += mask.charAt(i);
            else if(iPermission.charAt(i) == '0')
                res += falseCharacter;
    return res;
}

然后你可以像这样使用它:

if(user.substring(0, 1).equals("1"))
{
    permissionFor0 = convert(FirstInt, "rws", '-');
    permissionFor1 = convert(SecondInt, "rwx", '-');
    permissionFor2 = convert(ThirdInt, "rwx", '-');

    System.out.println(permissionFor0 + " "
        + permissionFor1 + " " + permissionFor2);
}