在Java中使用构造函数返回值

时间:2018-11-03 19:25:39

标签: java object constructor

好的,这是一个分配,所以不要帮我太多...我只需要返回一个DnaSequence对象。就是这样。嗯,这是构造函数

import java.io.File;
import java.lang.String;

public class DnaSequence {

  public char[] dna;

  public DnaSequence(char[] dna) {
    String str = String.valueOf(dna);
    str.replaceAll("[^ATCG]", "");
    dna = str.toCharArray();
    for (int i = 0; i < dna.length; i++) {
      this.dna[i] = dna[i];
    }
    return dna;
  }
}

稍后我将使用io.file和lang.string。

这是Main(用于测试)

public class DnaSequencetEST {
  public static void main(String[] args) {
    char[] bases = { 'G', 'A', 'T', 'T', 'A', 'C', 'A' };
    DnaSequence seq = new DnaSequence(bases);
    System.out.println(seq);//Should print "GATTACA"
  }
}

下面是我完成结果应该做的或看起来是什么样的链接。(如果您想看看,这很有趣) http://jeff.cis.cabrillo.edu/datasets/12j_dnasequence/DnaSequence.html

因此DnaSequence.java:14错误:类型不兼容:意外返回值 返回dna:         ^ 所以,是的,我一直盯着我看了5个小时,我们将不胜感激

3 个答案:

答案 0 :(得分:2)

好,给您两个提示:

  • 构造函数不返回值。他们创建对象。
  • 如果要打印自定义对象,则应定义一个特定的 toString 方法,以指示Java如何显示该对象。 Here一个例子。

答案 1 :(得分:2)

构造函数用于初始化对象内部状态。从逻辑上讲,这里将是char[] dna字段(并且不要使字段public仅仅是“因为”)。接下来,String是不可变的;因此str.replaceAll("[^ATCG]", "");没有分配是没有意义的(但是您可以在调用toCharArray()之前将其链接)。您需要为所需的行为覆盖toString()。您可以简单地将char[]传递给String构造函数。喜欢,

public class DnaSequence {
    private char[] dna;

    public DnaSequence(char[] dna) {
        this.dna = new String(dna).replaceAll("[^ATCG]", "").toCharArray();
    }

    @Override
    public String toString() {
        return new String(dna);
    }
}

答案 2 :(得分:0)

我不知道所有要求,但要通过该测试,您只需要在toString()上实现DnaSequence并返回DNA序列即可。 请注意,如果传递的对象是System.out.println,则toString将始终调用Object

解决方案:

public class DnaSequence {

  public final String dna;

  public DnaSequence(char[] dna) {
    this.dna = String.valueOf(dna).replaceAll("[^ATCG]", "");
  }

  @Override
  public String toString() {
    return this.dna;
  }

}