2017-09-11 10 views
-1

インストラクターが私に与えたコードを変更することができますが、これはオプションではない場合、この問題を解決する方法を知っています。私は、Javaでの経験があまりないことを強調する必要があります。Javaクラスは文字列の代わりにポインタを返します

私はスケルトンコードが提供されているプロジェクトを完成させるためにこの課題が与えられています。これは私がそれを実行しているから取得しています出力されます:あなたが見ることができるように、「ゲノム配列」フィールドではなく、より多くのようになります。有効なデータのポインタ「AAAGGTTATTA ...」

を印刷している

Genomic sequence: [[email protected] 
Sequence length: 25 
Array of exon positions: [1, 5, 8, 10, 13, 16] 

情報がプリントアウトされた場所です:私はポインタがに代わりのポインタ自体を指しているものをプリントアウトするために割り当てでこのクラスを変更することができれば、私は、

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配列を返すように変更するにはどうすればよいですか?

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; 
... 
+0

を生成します。それはあなたを始めさせるのに十分なはずです。 –

+0

質問の冒頭の太字のテキストを参照してください。 – sam

+0

そして、私は、データが何であるか知っているので、そのデータを取り、あなたが望む出力を得るのに十分な情報があると言います。それは授業のため、学ぶチャンスです(これはあなたから取られましたが、それはあなたのせいではありません)。 –

答えて

-1

から

ここ

は、ゲノムDNA配列の関連する部分ですあなたがGenomicDNASequenceにアクセスできますが、他のクラスは利用できません。 GenomicDNASequenceオブジェクトを印刷しようとすると、何らかの形で配列のような出力が表示されます。

これは、GenomicDNASequenceの先祖クラスの1つが、配列の文字列へのデフォルト変換を使用するtoStringメソッドを持つことを示唆しています。 Javaでは、aが配列の場合、a.toString()は奇妙に見えます。 GenomicDNASequenceオブジェクトのtoStringメソッドがシーケンスのよりクリーンなインスタンスを文字列として返すように、これをオーバーライドする必要があります。

特に私は、これは文字列"GCAT"['G', 'C', 'A', 'T']ターンのような文字列を作る

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

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

となるだろう。

補遺

new StringとNOT 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)); 
    } 
} 

は、それが文字列のデフォルトの `toString`を印刷しています

[[email protected] 
[G, C, A, T] 
GCAT 
+0

入力していただきありがとうございますが、インストラクターに応じて印刷されたクラスの内容を変更することはできませんので、可能ではありません – sam

+0

変更することができないコードの中に印刷コードが入っていますか?印刷コードを書くコードに移動できますか? –

+0

'gdemo'は配列ではなく、彼が与えたコードの' GenomicDNASequence'です。だから私はこれが有効な答えだとは思わない。 – pcarter