【问题标题】:Must be an array type but resolved to string必须是数组类型,但解析为字符串
【发布时间】:2014-01-14 09:51:44
【问题描述】:

我的代码中出现“必须是数组类型,但它解析为字符串”错误。它还说 i (在下面的代码中)无法解析为我没有得到的变量。

    public class DNAcgcount{

        public double ratio(String dna){
        int count=0;
        for (int i=0;i<dna.length();i++);
            if (dna[i]== "c"){
            count+= 1;
            if (dna[i]=="g"){
            count+=1;
        double answer = count/dna.length();
        return answer;

    }

    }


}

}

请大家帮我看看问题出在哪里?我是 Java 编码新手,所以我对这种格式还不是很熟悉。

非常感谢, 朱奈德

【问题讨论】:

  • 删除 for 语句后的分号,作为开始。
  • 你应该对齐从句,并将它们正确地嵌入到{ ... }中,这样人们就可以看到你的意思了。
  • @Ingo 实际上,OP 应该阅读一些介绍性教程,老实说 :) 这是我很长一段时间以来见过的最糟糕的反复试验编程情况。
  • @Vash 请不要通过修复代码中的错误来改变问题!
  • @tobias_k,更改的重点是错误。由于 { 问题与它无关。我已经这样做了,因为问题将留在 SO 上,并且将来对其他用户很重要。

标签: java arrays string


【解决方案1】:

您不能使用下标 (dna[i]) 访问字符串的字符。改用 charAt:

dna.charAt(i) == 'c'

另外,"c"String'c'char

还有一件事 - 整数除法(例如 int_a / int_b )会导致 int,因此您会失去准确性,相反 - 将 ints 之一转换为 double

double answer = count/(double)dna.length();

【讨论】:

  • 所以我必须使用“c”而不是“c”?另外,它仍然说我无法解析为变量?非常感谢。
  • @user2904796 - 是的。并且您的某些错误未显示在问题中,因为有人已经对其进行了编辑。查看他执行的编辑,修改您的代码,然后重试。
  • 声明计数为双倍计数 = 0;也可以完成这项工作。
  • @pshemek - 当然,我更喜欢这样做,但我想这是一个品味问题..
【解决方案2】:

使用{} 定义循环的范围。另外,正如其他人已经指出的那样,使用charAt 而不是[] 并使用' 来表示字符,并使用浮点除法来表示ratio

for (int i = 0; i < dna.length(); i++) {
    if (dna.charAt(i) == 'c') {
        count += 1;
    }
    if (dna.charAt(i) == 'g') {
        count += 1;
    }
}

或者更短一点,用||或者把两个子句放在一起

if (dna.charAt(i) == 'c' || dna.charAt(i) == 'g') {
    count += 1;
}

【讨论】:

    【解决方案3】:

    我认为您目前在括号方面有点弱,这是我从您的代码中理解并更正的;

    public class DNAcgcount{
    
        public double ratio(String dna){
        int count=0;
        for (int i=0;i<dna.length();i++){
            if (dna.charAt(i)== 'c')
            count+= 1;
            if (dna.charAt(i)=='g')
            count+=1;
        }
            double answer = count/(double)dna.length();
            return answer;
        }
    }
    

    如果我们必须在你想要的 if 完成后关闭括号。我认为您希望count 成为cgdna 中出现的次数。 如果您使用的是.charAt(i),您还犯了一些其他错误,例如您必须使用'c''g' 而不是"c""g",因为它将被视为一个字符,然后只有您可以比较。 您可以查看此链接 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

    你也可以看看你可以用字符串做的工作,比如 charAt。

    【讨论】:

      【解决方案4】:

      您似乎对loopsif-else 语句等基本java 函数的主要语法存在一些问题。点击here 获取关于这些的优秀教程。

      您必须更正您的for-loopif-statement

      for(int i=0;i<dna.length();i++){
          if(...){
             ...;
          }
          if(...){
             ...;
          }
      }
      

      现在你不会得到Cant be resolved to a variable... exception

      第二件事是你的字符串的使用。你必须像这样使用它:

      for(int i=0;i<dna.length();i++){
          if(dna.charAt(i) == 'c'){
             count += 1;
          }
          if(dna.charAt(i) == 'g'){
             count += 1;
          }
      }
      

      现在你所有的例外都应该被消除了。

      【讨论】:

        【解决方案5】:

        您的问题在于语法dna[i]dna 是一个字符串,您可以像[] 的数组一样访问它。请改用dna.charAt(i);

        【讨论】:

          【解决方案6】:

          您错误地使用了String。不要通过[] 访问,而是使用dna.charAt(i)

          尽管从逻辑上讲,字符串在 Java 中是一个字符数组,String 类型是一个类(这意味着它具有属性和方法),而不是典型的数组。

          如果您想将单个字符与另一个字符进行比较,请使用 '' 而不是 "":

          if (dna.charAt(i) == 'c')
          .
          .
          

          【讨论】:

            【解决方案7】:

            有两个错误:

            count 应该是 double 或者应该强制转换 do double answer = (double)count / dna.length();

            如上所述,您应该将 dna[i] 替换为 dna.charAt(i)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-03-23
              • 2015-01-14
              • 2012-04-20
              • 2018-08-14
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多