【问题标题】:Java class returns pointer instead of string [duplicate]Java类返回指针而不是字符串[重复]
【发布时间】:2017-09-11 01:54:53
【问题描述】:

我想强调我知道如何解决这个问题,只要我可以修改我的导师给我的代码,但这不是一个选择。我还应该强调我对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;
...

【问题讨论】:

  • 它正在打印字符数组的默认toString。这应该足以让您入门。
  • 我知道了,请参考题首粗体字
  • 我是说,既然你知道数据是什么,你就有足够的信息来获取这些数据并获得你想要的输出。因为它是课程作业,所以它是一个学习的机会(这是从你那里拿走的,但这不是你的错)。
  • 从 OP 中获取了什么?在 StackOverflow 上提问是一个很好的学习机会。社区在大量讨论中的筹码通常远远超出来自个别分配问题的有时很小且集中的学习目标。显然,自己发现一个解决方案是可取的,但是当遇到困难时,最好通过大量详细说明和背景信息获得答案,这对学习者来说比仅仅做最少的工作来解决分配的问题更有价值。干杯。

标签: java string class pointers


【解决方案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

【讨论】:

  • 感谢您的输入,但我无法根据讲师更改打印的课程内容,所以这是不可能的
  • 所以打印代码在不允许修改的代码里面?能不能把打印代码移到自己写的代码里?
  • gdemo 不是数组,而是他给出的代码中的GenomicDNASequence。所以我认为这不是一个有效的答案。
  • 啊,是的,我现在看到了。谢谢!
  • 谢谢!您对帖子所做的编辑真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
相关资源
最近更新 更多