使用数组内容打印字符串

3

我写了这段代码,它将整数数组的内容根据数字是否大于、等于或小于50转换为一个由4个字母组成的字符串。但我担心这个方法过长而且重复度高。

  public static String computePersonality(int[] percentB) {
     String personality = "";
     if (percentB[0] < 50) {
        personality += "E";
     } else if (percentB[0] > 50) {
        personality += "I";
     } else { 
        personality += "X";
     }   
     if (percentB[1] < 50) {
        personality += "S";
     } else if (percentB[1] > 50) {
        personality += "N";
     } else {
        personality += "X";
     }   
     if (percentB[2] < 50) {
        personality += "T";
     } else if (percentB[2] > 50) {
        personality += "F";
     } else {
        personality += "X";
     }
     if (percentB[3] < 50) {
        personality += "J";
     } else if (percentB[3] > 50) {
        personality += "P";
     } else {
        personality += "X";
     }
     System.out.println(personality);
     return personality;
  }                       

1
这个问题可能更适合在 [CodeReview.se] 上进行讨论。 - Arc676
告诉我这是全部的代码还是你还会有更多行(在这个方法中)?问这个是因为有了完整的代码,我可以做得更好。 - GOXR3PLUS
这个问题可能适合于代码审查,只要(a)你的代码按照预期工作,(b)你的代码是真实的代码,而不是示例代码,(c)你的代码包含在问题正文中。如果你希望进行同行评审以改进代码的所有方面,请在代码审查上发布它。 - Phrancis
2个回答

2
您可以将逻辑提取到一个方法中,该方法根据单个整数的值返回两个字符之一。例如:
private static char computeChar(int percent, char low, char high) {
    if (percent < 50) {
        return low;
    } else if (percent > 50) {
        return high;
    }
    return 'X';
}

那么你的计算机人格可能会被实现为类似以下内容:

public static String computePersonality(int[] percentB) {
    StringBuilder sb = new StringBuilder(4);
    sb.append(computeChar(percentB[0], 'E', 'I'));
    sb.append(computeChar(percentB[1], 'S', 'N'));
    sb.append(computeChar(percentB[2], 'T', 'F'));
    sb.append(computeChar(percentB[3], 'J', 'P'));
    System.out.println(sb);
    return sb.toString();
}

0
public class Snippet {

public static void main(String[] args) {
    computePersonality(new int[] { 5, 5, 50, 200 });
}

public static String computePersonality(int[] percentB) {
    String personality = "";
    String[] array = { "X","E", "I", "S", "N", "T", "F", "J", "P" };

   // Works when array.length-1=percentB.length*2;
    for (int value : percentB)
        personality += array[value == 50 ? 0 : (personality.length() * 2 + 1 + (value < 50 ? 0 : 1))];

    return personality;
}
}

for的解释:

如果value等于50,则在数组[0]位置添加“X”,否则在数组中添加personality.length*2位置上的字母。

+1(因为我在数组的0位置添加了X,所以从位置1开始)

+0|1(根据您算法的逻辑而定)。

您可以按照相同的逻辑在array中添加更多字母,它也会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接