【问题标题】:Confusing Behavior with Array Initialization -- Processing (Java)混淆行为与数组初始化——处理(Java)
【发布时间】:2019-09-07 08:53:18
【问题描述】:

我在尝试创建一定长度的数组时遇到了一些令人困惑的行为。长度由函数 getTermNums 中读取的文件获得。当我尝试创建这种大小的数组时,我的代码以奇怪的顺序运行,我的 i 值是倾斜的,并且代码通常不会按预期运行。当我改为创建一个设置整数数量的数组时,代码会按预期运行而不会出错。

   double[] terms;

    int numTerms = getNumTerms(lines[0]);
    terms = new double[numTerms];

    int i = 1;

    for (i = 1; i<terms.length; i++){
      //terms[i] = calculateTerm(T, lines[i]);

    } 

以上代码运行不正确。

    double[] terms;

    int numTerms = getNumTerms(lines[0]);

    int myNum = 200;
    terms = new double[myNum];

    int i = 1;

    for (i = 1; i<terms.length; i++){
      //terms[i] = calculateTerm(T, lines[i]);

以上代码运行正确

int getNumTerms(String line){

    int i = 60;
    int j = 0;
    char[] word;
    word = new char[4];
    int numTerms;
    int numTermLen = 0;


    while(new String(word).compareTo("TERM") != 0){
      for (j=0; j<4; j++){

        word[j] = line.charAt(i + j);
      }
      i++;
    }
    j = i - 3;

    while( new Character(line.charAt(j)).equals(' ') == false){

      numTermLen++;
      j--;
    }

    j++;
    println("i in here: ", i);
    numTerms = Integer.parseInt(line.substring(j, j + numTermLen));
    return numTerms;
  }

这是我调用的函数,用于读取第一个示例中数组大小的 numterms,但无法正常工作。

当我使用函数调用来设置数组 terms[] 的大小时,i 从某个值开始,例如 380,并且通过数组 lines[] 的迭代从数组中间的某个位置开始。 当我使用整数 myNum 来设置数组 terms[] 的大小时,i 从 1 开始,并且通过数组 lines[] 的迭代按照预期从第一行开始。

感谢任何解释!我是 java 编码的新手,对这个错误的来源感到困惑。 提前致谢。

【问题讨论】:

  • 您可以发布您正在解析的文本示例吗?解析numTerms 整数值的方式可能存在问题。
  • 你用过调试器吗?

标签: java processing


【解决方案1】:

如果没有看到文本,就很难推断出您的getNumTerms 中发生错误的位置。

您可以使用String's indexOf()查找“TERM”的索引,使用substring()提取包含整数值的字符串。

据我了解,理想的字符串应该是“TERM”,后跟一个整数,然后是一个空格字符。如果找到这些项目并且value fits within 32 bits 您应该能够使用这样的东西:

String line = "LINE START TERM-1238847 LINE END";

int getTerm(String line){
  int result = Integer.MAX_VALUE;
  final String SEARCH_TOKEN = "TERM";
  // look for TERM token and remember index
  int termIndex = line.indexOf(SEARCH_TOKEN);
  // handle not found
  if(termIndex < 0){
    System.err.println("error: " + SEARCH_TOKEN + " not found in line");
    return result;
  }
  // move index by the size of the token
  termIndex += SEARCH_TOKEN.length();
  int spaceIndex = line.indexOf(' ',termIndex);
  if(spaceIndex < 0){
    System.err.println("error: no SPACE found after " + SEARCH_TOKEN);
    return result;
  }
  // chop string extracing between token end and first space encountered
  String intString = line.substring(termIndex,spaceIndex);
  // try to parse int handling error
  try{
    result = Integer.parseInt(intString);
  }catch(Exception e){
    System.err.println("error parsing integer from string " + intString);
    e.printStackTrace();
  }

  return result;
}


System.out.println("parsed integer: " + getTerm(line));

【讨论】:

    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多