2016-04-13 14 views
-3

yazdırmak için? Örneğin, aşağıdaki kontrolü değeri I "Hata: = 0 edin" almak için toString geçersiz kıldık 0. ise iki farklı hata iletileri yazdırmak gerekiyor basit bir örnek ama zorluk gösteren yaşıyorum yazdırmak için " Hata: Çift değer kesin değil ".nasıl belli koşul verilen iki farklı geçersiz kılınan toString mesajları yazdırmak için bir yolu var mı iki ayrı geçersiz kılınan toString mesajları

public class test{ 
public static void main(String[] args) 
{ 
System.out.println(new Set(1,0)); // Should print "Error: Check = 0" 
System.out.println(new Set(1,0).toDouble()); // Should print "Error: Double value not precise" 
} 
} 

// ------------------------------------------ 
public class Set{ 
int a; 
int check; 

Fraction(int a, int check) 
{ 
this.a = a; 
this.check = check; 
} 
// ------------------------------------------ 
public String toString() 
{ 
if(this.check == 0) 
    return "Error: Check = 0"; 

return (this.a + ":" + this.check); 
} 
// ------------------------------------------ 
public double toDouble() 
{ 
double number; 

if(this.check != 0) 
    number = ((a * check) + (1/3)); 
else 
    number = 0; 

return number; 
} 
// ------------------------------------------ 
public String toString(double d) 
{ 
return ("" + d); 
} 
} 
+0

Neden özel bir Özel Durum kullanmıyorsunuz? –

+1

"Error: Double value of precise" ifadesinin yer aldığı toStrid() öğesi nerede bulunuyor? –

+0

Bunu yapamazsınız çünkü ikinci işlev durumunda ikinci işlev durumunda çağrılmayacaktır çünkü çift – Alok

cevap

0

Sorununuza birkaç yanıt gelebilir. Bunlardan biri, "kontrol" işaretini hatanın bir tanımlayıcısı olarak kullanmaktır. Örneğin. Zaten 0 değerini "Hata: kontrol 0" olarak yorumlıyorsunuz. Benzer şekilde -1 değeri veya bir şey atayabilirsiniz (yalnızca bir işaretin bayrak olduğu ve iş açısından önemi olmadığı varsayılmaktadır. Aksi takdirde bu işi yapmak için ayrılmış bir bayrak değişkeni tanımlayabilirsiniz). Özel durumunuza göre toDouble yöntemini kontrol etmek için -1'in bu değerini atayabilirsiniz. Ardından, toString yönteminde, önce kontrolün -1 değeri olup olmadığını kontrol edin. -1 ise, "Çift değer kesin değil" hatasını görüntüleyin. 0 ise, "Check is 0" hatasını gösterir. Bunu çok iyi açıklamıyorsam haberim olsun.

+0

Bu tip bir düşünmeyi, Set sınıfına bir Boolean double_check değişkeni ekleyerek denedim ve değişkeni toDouble yönteminin içine aldım. Ama ben bunu işe alamadım çünkü sistem println ifadesi için overStribe toString yöntemimi çağırmıyor. Overrideen toString (double d) yöntemimi bile çağırmıyor. – Samuel

+0

Oh Görüyorum.ToDouble yönteminizin dönüş türünü ikiden Set'e değiştirmeyi deneyebilir misiniz? ToString yönteminizin çağrılma nedeninin nedeni, bu durumda işlenen nesnenin Çift olduğu ve Ayarlanmamış olmasıdır. – VHS

+0

Henüz denedin mi? Set sınıfının toDouble yönteminden Set'in yeni bir örneğini döndürmeniz yeterlidir. Yeni örnekte, kontrol için -1 değerini ayarlayın. Ve sonra toString'de, kontrol -1 ise "Çift, hassas değil" hatasını gösterir. – VHS

0

Kontrol bu

public double toDouble() 
{ 
double number; 

if(this.check != 0) 
    number = ((a * check) + (1/3)); 
else 
{number=0; 
    System.out.println("Error: Double value not precise");} 

return number; 
} 
+0

Bir istisna çıkmadan programın içindeki hatayı görüntülemek istiyorum. – Samuel

+0

Bu yüzden istisnayı 'system.out.println (" Hata: İkili değer tam değil ") ile değiştirin. –

+0

Bu, ekrana yazdırmaya çalışacak ancak amacım için bunu önleyici olarak yazdırıyor. Başka bir deyişle, çıktısının zamanlamasını dikkatlice kontrol edemiyorum. – Samuel

0

toString() Kullanmak çalıştığınız bir Örnek yöntemi olduğunu. Her sınıf kendi örnek yöntemlerini bildirebilir. Bu örnek yöntemler, başka bir şey tarafından iradeyle geçersiz kılınamaz. Durumunuzda, toDouble(), bir double döndürdüğünden ve Java'nın bunu Double'a "otomatik olarak" ekleyeceğinden, println, Double içinde tanımlanan toString() yöntemini çağırır. Java'da "Double'un toString() yöntemini benim seçimimden biriyle değiştir" şeklinde söylemesi mümkün değil. double parametresi ile toString() bildirilmesi kesinlikle bunu yapmayacaktır.

toString() yöntemi gibi bir örnek yöntemini geçersiz kılmanın tek yolu bir alt sınıftır. Double son sınıf değilse, kendi MyDouble alt sınıfını, Double'u genişletebilir ve MyDouble'da toString() yöntemini geçersiz kılabilirsiniz. Ama aynı zamandatoDouble()Return sonra yerineDoubleveyadouble birMyDoubleyapmak gerekir. O zaman, MyDouble nesnesine sahip olduğundan println, MyDoubletoString'u çağırır. Geçersiz bir örnek yöntemi elde etmenin tek yolu, bunun gibi bir alt sınıfın nesnesidir. Bu ağır basan başka Double için değil değişikliği toString()olacaktır. (Ancak, Double, final olarak işaretlenmiştir, bu nedenle kendi alt sınıfınızı gerçekten tanımlayamazsınız.)

+0

Tamam bu mantıklı ve ben içine koşuyorum sorun olduğunu düşünüyorum. “Java'da bunu yapmanın bir yolu yok” derken biraz kafam karıştı ama sonra bunu yapmak için ikinci paragrafta bir tür talimat verirsin. – Samuel

+0

'Set' sınıfınızın içinden' Double''in toString() 'işlevini geçersiz kılmanın yolu yoktur. – ajb

İlgili konular