Java类返回指针而不是字符串

时间:2017-09-11 01:54:54

标签: java string class pointers

我想强调,如果我能修改教师给我的代码,我知道如何解决这个问题,但这不是一个选择。我还应该强调我没有多少Java经验。

所以我得到了这个任务来完成一个为我提供骨架代码的项目。这是我从运行它得到的输出:

Genomic sequence: [C@4aa298b7
Sequence length: 25
Array of exon positions: [1, 5, 8, 10, 13, 16]

如您所见,"基因组序列"字段正在打印指针而不是有效数据,这些数据看起来更像是" AAAGGTTATTA ..."

这是打印信息的地方:

public class BioSeqData
{
  public static void main(String[] args)
  {
    String demodna = new String("AATGCCAGTCAGCATAGCGTAGACT");
    int[] ardemo = {1, 5, 8, 10, 13, 16};
    GenomicDNASequence gdemo = new     GenomicDNASequence(demodna.toCharArray());
    System.out.println( "Genomic sequence: " + gdemo );
    ...

如果我可以在赋值中修改这个类来打印指针指向的内容而不是指针本身,我会,但这不是一个选项。如何更改GenomicDNASequence以返回char数组而不是指针?

以下是基因组DNA序列的相关部分:

public class GenomicDNASequence extends DNASequence
{
  public boolean[] iscoding; // made public instead of private for grading.
  public GenomicDNASequence(char[] gdnaarr)
  {
    super(gdnaarr);
  }
...

它所延伸的课程:

public class DNASequence extends Sequence                                                                                                                                                                                                                                        
{                                                                                                                                                                                                                                                                                
  public DNASequence(char[] dnaarr)                                                                                                                                                                                                                                              
  {                                                                                                                                                                                                                                                                              
    super(dnaarr);                                                                                                                      
  }
...

延伸的课程:

public class Sequence
{
  public char[] seqarr; // made public instead of protected for grading.
  public Sequence(char[] sarr)
  {
        for(int i=0;i<sarr.length;i++){
                if (!isValidLetter(sarr[i])){
                        throw new IllegalArgumentException("Invalid sequence of letters for class edu.iastate.cs228.hw1.Sequence");
                }
        }
        seqarr=sarr;
...

1 个答案:

答案 0 :(得分:-1)

据我所知,您可以访问GenomicDNASequence但不能访问任何其他类。当您尝试打印GenomicDNASequence对象时,您会看到类似于数组的输出。

这表明GenomicDNASequence的祖先类之一具有toString方法,该方法使用数组的默认转换为字符串。在Java中,如果a是一个数组,那么a.toString()看起来很奇怪。您需要覆盖它,以便您的GenomicDNASequence对象的toString方法将序列的更清晰的实例作为字符串返回。

特别是我会选择

public class GenomicDNASequence extends DNASequence {
  public boolean[] iscoding; // made public instead of private for 

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

这使得像['G', 'C', 'A', 'T']这样的字符数组变成了字符串"GCAT"

<强>附录

使用new String和非Arrays.toString()非常重要。例如:

import java.util.Arrays;
public class MyClass {
    public static void main(String args[]) {
        char[] c = {'G', 'C', 'A', 'T'};
        System.out.println(c.toString());
        System.out.println(Arrays.toString(c));
        System.out.println(new String(c));
    }
}

产生

[C@2a139a55
[G, C, A, T]
GCAT
相关问题