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循环但是我没有想出任何壮观的东西。
答案 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 += "-";
然后你可以找出一些清晰的重复;例如你有一个看起来像FirstInt
,SecondInt
和ThirdInt
的剪切和粘贴的块。你可以像这样声明一个int数组。
String[] ints = new String[] {FirstInt, SecondInt, ThirdInt};
然后使用for (i = 0; i < 3; i++)
循环替换剪切和粘贴重复。或者使循环体成为您使用FirstInt
,SecondInt
和ThirdInt
作为参数调用的方法。
等等。
如果你(仔细地)对你的代码进行一系列重写,每个人都应用一些简单的重构&#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);
}