2016-03-30 21 views
0

İlk komut satırı bağımsız değişkeni "-1" ise ve sınıfının bir örneğinin başka bir örneği varsa, belirli bir sınıfın bir örneğinin değişkenini oluşturan bir program yazıyorum. Ebeveyn ve alt sınıf aynı yöntem ve yöntem adlarını paylaşır, ancak alt sınıf ebeveynleri bazıları için geçersiz kılar. Diğer bir deyişle, beyanın ardından programın geri kalanı, hangi sınıfı kullandığımı dikkate almaksızın tamamen aynıdır. Ağaç sonradan başvuruda bulunulan bir "çözülemeyen" hatası atarif/else bloğu içinde değişkenleri bildirme

if(args[0].compareTo("-1") == 0){ 
     BST Tree = new BST(); 
    } 
    else{ 
     RBT Tree = new RBT(); 
    } 

: İşte şu anda var ilanıdır. Bir sürü gereksiz kod olmadan bu soruna bir çözüm var mı? Açıkçası, tüm ana işlevi, eğer/else blokları içerisine koyabilirdim ama daha özlü bir çözüm varsa bundan kaçınmak isterim.

+1

BST ve RBT nasıl ilişkilidir? Ortak taban sınıfları var mı? –

+0

RBT BST'yi uzatıyor gibi görünüyor. – Gendarme

cevap

0

Değişkeni if ​​ifadesinin kapsamı dışında belirtin.

BST Tree; 

if(args[0].compareTo("-1") == 0){ 
    Tree = new BST(); 
} else { 
    Tree = new RBT(); 
} 

Bu RBTBST uzanır varsayar.

1

Ayrıca, ifadelerin kapsamında Tree değişkenini de bildirdiğinizden. Bu kapsamların dışında, Tree daha uzun çözülemez.

Sen eğer deyimi önce Tree ilan edebilir: (Bu if bloktan sonra netliğe sahip olacak şekilde)

BST Tree; 

if(args[0].compareTo("-1") == 0){ 
    Tree = new BST(); 
} else { 
    Tree = new RBT(); 
} 

doSomethingWith(Tree); // Should work fine 
+1

Başka bir deyişle: nesne kolayca ulaşılamaz. – Gendarme

0

if bloğundan önce Tree bildirin. Gibi

BST Tree; 
if(args[0].compareTo("-1") == 0){ 
    Tree = new BST(); 
} 
else{ 
    Tree = new RBT(); 
} 

veya yüzden bir sınıf adı benziyor ki (treeTree tercih edeceğini küçük harfle başlamak kongre Java değişken adlarıyla da

BST Tree = (args[0].compareTo("-1") == 0) ? new BST() : new RBT(); 

gibi üçlü kullanmak).