【问题标题】:Graphing using 2D array使用二维数组绘图
【发布时间】:2017-03-17 11:57:48
【问题描述】:

我已经解决这个问题一段时间了,我似乎无法调试我的程序。 我已经使用 2d 数组创建了一个图形,我试图在 x 和 y 坐标点上放置一个“X”。然后我试图在这些点的顶部绘制一条最小二乘回归线。 这是我的代码 sn-p:

char[][] graph = new char[21][42];

for (int i = 0; i < count; ++i) {
 graph[21 - 1 - yCoords[i]][xCoords[i] + 1] = 'X';
}

// plot the regression line
for (int i = 0; i < graph.length; i++) {
 int yPred = Math.round(yMean + slope * (i - xMean)); // calculate regression value
 graph[21-1-yPred][i + 1] = graph[21-1-yPred][i + 1 ] == 'X' ? '*' : '-'; //problem somewhere here
}

//This is how i initialized my array
 public static void initializeArray(char[][] charArray) {
  for(int k =0; k< charArray.length; k++) {
      for(int d = 0; d < charArray[0].length;d++) {
        charArray[k][d] = ' ';
      }
    }
  for (int i = 0; i < charArray.length; ++i) {
    charArray[i][0] = '/';
  }
  charArray[20][0] = '+';

  for (int i = 1; i < charArray[0].length; ++i) {
    charArray[20][i] = '-';
  }
}

请记住,这不是完整的代码。如果有人很难找出问题所在,请在下面发表评论,我将解释或提供更多代码来解决我的问题。

现在我得到了这个输出。

我的预期输出是这样的:

问题似乎在于绘制回归线。所以我使用“X”表示点,“-”表示回归线段,“*”表示线段和点位于同一点。 我愿意提供更多细节。谁能帮我解决错误。

【问题讨论】:

  • 看来您正在从 0 绘制到“graph.length”。 graph.length 等于第一个维度的长度,因此为 21。如果您计算图表中的破折号,您会看到其中有 21 个。
  • 那么我该如何解决这个问题呢? @杰米
  • 嗯,你可以试试graph[0].length
  • 我确实尝试过,但它给了我数组越界异常? @杰米
  • 不知道你在哪里得到一个索引越界异常,我猜这是因为你试图在这个指令上绘制一个超过 x 维度 (42) 长度的标记:图[21-1-yPred][i + 1]。 i+1 在 x 维度中超过了数组的末尾。

标签: java debugging multidimensional-array formatting char


【解决方案1】:

对于面临同样问题的任何人,这是我为获得正确输出所做的工作。 我所要做的就是在循环时放置 -1 以避免索引越界异常。 这是代码:

for (int i = 0; i < graph[0].length - 1; i++) {
 int yPred = (int) (yMean + (slope * (i - xMean)));
 if(yPred > 0 && yPred < 21) {
   graph[21 - 1- yPred][i+1] = graph[21 - 1- yPred][i+1] == 'X' ? '*' : '-';
  }

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多