2016-03-28 14 views
1

は、私は教授が私に与えられ、次の変数Stringを汎用型に変換する方法<E>?

protected E data; 
protected BinaryTree<E> left,right; 

でバイナリツリーBinaryTree<E>を持っていると私は次のコードで成功しなかった各ノード(ここで示すのみ関連するコード)の値を倍にするように頼まれました:

if (data != null) { 
    this.setData(String.valueOf(Integer.parseInt(getData().toString()) * 2)); 
} 

残念ながら、これは私が取り除くしたいと思います次の警告を発生させます:

1 error found: 
Error: incompatible types: java.lang.String cannot be converted to E 

アイデアは?

+4

あなたの課題は理にかなっていません。任意のタイプの「値を倍にする」ことはできません。あなたは教授に正確に何が意味しているかを指定するように頼むべきです。 – yole

+0

ここで@yoleは命令です:メソッド6-8は、バイナリツリーに格納された文字列が実際には整数であることを前提としています。あなたのコードはInteger.parseIntメソッドを使ってintに変換する必要があります。そのうち7. void doubles(); ツリーの各ノードの整数値を2倍します。 – cyril

答えて

1

Eをパラメータとして実装する必要があります。あなたが入力パラメータString型とにsetDataを実装する場合、それは文字列がEに変換できないエラーをスローします下記参照してくださいコード:

public class BinaryTree<E> { 
    E data; 

    BinaryTree<E> left, right; 

    public void doubleEachElement() { 
     BinaryTree temp = this; 
     if (temp != null) { 
      if (temp.data != null) { 
       temp.setData(String.valueOf(Integer.parseInt(temp.getData().toString()) * 2)); 
      } 
      this.left.doubleEachElement(); 
      this.right.doubleEachElement(); 
     } 
    } 

    // private void setData(String valueOf) {// This would throw an error 
    // stating the String cannot be converted to E 
    // data = valueOf; 
    // } 
    public void setData(E valueOf) { 
     data = valueOf; 
    } 

    public E getData() { 
     return data; 
    } 

    public void printBTreeInorder() { 
     BinaryTree temp = this; 
     if (this != null) { 
      System.out.println(data); 
     } 
     if (this.left != null) 
      this.left.printBTreeInorder(); 
     if (this.right != null) 
      this.right.printBTreeInorder(); 
    } 

    public static void main(String[] args) { 
     BinaryTree<Integer> intBTree = new BinaryTree<>(); 
     intBTree.setData(3); 
     intBTree.printBTreeInorder(); 
     intBTree.doubleEachElement(); 
     intBTree.printBTreeInorder(); 
    } 
} 

コメント行時にあなたが言及した同じエラーにコメントを外し、リード質問。

+0

ありがとう、魅力的なように働いた! hmmを使用してsetDataに呼び出されるチェックを取得する – cyril

0

あなたのBinaryTreeがジェネリック型である、あなたは this.setData(...)を使用するときに毎回、それはあなたがそれの内側に設定どんなタイプ、それは型であることを期待するE.

だからあなたのコードEのデータ型を追加する必要があります。

だから、あなたは2つのソリューションを持っている:あなたは、文字列またはより良いとして直接データを設定することができるように

  • があなたのBinaryTreeクラスのEを削除して、あなたのデータフィールド/メソッドを「java.lang.Object上位を」保存します(新しいDouble(...))

  • たとえば、あなたの加算値にBinaryTreeクラスを使用する場合は、BinaryTreeの特殊なバージョンを使用します:BinaryTree node = new BinaryTreeNode(); node.setData(新しいDouble(3.5));

関連する問題