image.png

    • 规定第一行没有赋值操作

    image.png

    • 字符串对应的就是操作,然后里面还有嵌套,嵌套着嵌套着就有可能越界了对吧,要求你算出报错的是哪一行

    image.png

    1. public static int findError(String[] contents) {
    2. if (contents == null || contents.length == 0) {
    3. return 0;
    4. }
    5. //数组名字
    6. String arrName = contents[0].substring(0, contents[0].indexOf("["));
    7. int arrSize = Integer.parseInt(contents[0].substring(contents[0].indexOf("[") + 1, contents[0].indexOf("]")));
    8. int[] arr = new int[arrSize];
    9. for (int i = 1; i < contents.length; i++) {
    10. String[] parts = contents[i].replace(" ", "").split("=");
    11. String left = parts[0].replace(arrName, "");
    12. //左边部分需要剥掉最外边一层
    13. left = left.substring(1, left.length() - 1);
    14. String right = parts[1].replace(arrName, "");
    15. Integer leftIndex = value(left, arr);
    16. Integer rightValue = value(right, arr);
    17. if (leftIndex == null || rightValue == null) {
    18. return i;
    19. }
    20. if (leftIndex < 0 || leftIndex >= arrSize) {
    21. return i;
    22. }
    23. arr[leftIndex] = rightValue;
    24. }
    25. return 0;
    26. }
    27. // str -> " [[[7]]] " 返回什么
    28. public static Integer value(String str, int[] arr) {
    29. int value = Integer.parseInt(str.replace("[", "").replace("]", ""));
    30. int levels = str.lastIndexOf("[") + 1;
    31. for (int i = 0; i < levels; i++) {
    32. if (value < 0 || value >= arr.length) {
    33. return null;
    34. }
    35. value = arr[value];
    36. }
    37. return value;
    38. }
    39. public static void main(String[] args) {
    40. String[] contents = {
    41. "arr[7]", // 第一行没有赋值操作
    42. "arr[0]=6",
    43. "arr[1]=3",
    44. "arr[2]=1",
    45. "arr[3]=2",
    46. "arr[4]=4",
    47. "arr[5]=0",
    48. "arr[6]=5",
    49. "arr[arr[1]]=3",
    50. "arr[arr[arr[arr[5]]]]=arr[arr[arr[3]]]",
    51. "arr[arr[4]]=arr[arr[arr[0]]]",
    52. "arr[arr[1]] = 7",
    53. "arr[0] = arr[arr[arr[1]]]" };
    54. System.out.println(findError(contents));
    55. }