2009-10-18 18 views
6

Evet veya hayır soru & cevabım var. Cevabınız evet ise başka bir soru sormak istiyorum. Eğitmenim cevap için girdi olarak charAt (0) kullanmamızı istiyor.Java Soru: Başka bir anahtarın içinde bir anahtar ifadesi olması mümkün mü?

Başka bir anahtar içinde (iç içe geçmiş bir ifade gibi) bir anahtar ifadesi olması mümkün mü?

Şimdiden teşekkürler.

DÜZENLEME: İşte benim sözde kod örneğini görebilirsiniz =

display "Would you like to add a link (y = yes or n = no)? " 
input addLink 

switch (link) 
    case 'y': 
     display "Would you like to pay 3 months in advance " + "(y = yes or n = no)?" 
     input advancePay 

       switch(advPay) 
         case 'y': 
       linkCost = 0.10 * (3 * 14.95) 

       case 'n' 
       linkCost = 14.95    
    case 'n' 
     linkCost = 0.00 
+16

:

bu yapmacık örnek bir göz atın, bir switch ifadesi içindeki yürütme bir switch deyimi göstermek için ... –

+0

Sanırım SO noktası, insanların bir fikri test etmek için kod yazmasına gerek duymamasıdır. –

+2

@ande_turner: no. SO, sorulara cevap vermek, insanlar yerine işleri yapmak için değil. "Evet ama yapma" nın özeti için –

cevap

14

Evet, ama yok. Böyle bir mantık seviyesine ihtiyacınız varsa, ikinci Anahtarı kendi yöntemine açıklayıcı bir adla yerleştirin.

DÜZENLEME: Eklediğiniz örnekte iki Boole durumu var. Bunun yerine, if & else koşullarını kullanarak geçişi kullanmamaya karşı öneriyorum. Test durumunuz olarak (STRING.charAt(0) == 'y') kullanın ya da boolean isY(final String STRING) { return (STRING.charAt(0) == 'y' || STRING.charAt(0) == 'Y'); }

+5

+1. – CPerkins

1

gibi bir yöntem kullanın. Bu mümkündür, ancak bu çok kıvrımlı ve okunması zor olacaktır. Bu yöntemde, ilk anahtar deyiminde bir yöntemi çağırmak ve daha fazla gerekli işlemleri (gerekirse başka bir anahtar dahil) yapmak gibi, kesinlikle daha iyi bir yol vardır.

0

Çoğu programlama dili ortogonaldir. Bu, bir özelliği kullanmak genellikle anlamlıysa, konuma bağlı olmadığı anlamına gelir. Örneğin, bir yerel değişkeni herkese açık olarak bildiremezsiniz.

+1

@Srini: Bu sorunun nasıl yanıtlandığını göremiyorum. Spesifik olarak, Java'daki 'switch'in ortogonal olup olmadığı hakkında hiçbir şey söylemez. Ortogonalite, programlama dili tasarımcılarının çaba gösterdiği, ancak nadiren tamamen başardığı bir özelliktir. Herhangi bir dil yapısının dil özelliklerini anlamadan ortogonal olacağı sonucuna varamazsınız. Bu istisnalardan biri olabilir. –

2

Evet. Anahtarlar, dil bloğu deyim kalıbını bozar, ancak bu, esas olarak Java tarafından kullanılan anahtar deyiminin temel aldığı C/C++ nedeniyle oluşur. Bir switch deyimi geleneksel dil desen kırar

switch(variable) { 
    case n: 
     statement 1; 
     statement n; 
     (optional) break; 
    case n+1: 
     statement 1; 
     statement n; 
     (optional) break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 

Çünkü birçok programcı geleneksel blok stilini kullanarak bir durumda onların çoklu ifadeleri sarın: Her üç dilde

, switch deyimi şu biçimde olur { }

Bunun nedeni, her üç dilde de çoğu yapının blok stil deyimlerinin tek bir deyim olarak kabul edilmesine izin vermesidir, ancak anahtar deyimi tek bir durumda birden çok deyimi yürütmek için blok stili gerektirmez.

Her bir durumu ayıran break ifadesi olmadan, "fall through" olacaktır - eğer n durumu eşleştiyse ve bir ara vermediyse, altındaki kod (case n + 1) - eğer case n + 1 bir ara vermediler ve eşleştiler, varsayılan kod çalıştırılamazdı, eğer ne bir ara verdiyse, n harfini eşleştirirken, case n için kod, case n + 1 ve default çalıştırılacaktı.

Varsayılan isteğe bağlıdır ve çalıştırılacak anahtar ifadesi için varsayılan eylemi belirtir. Tipik olarak, varsayılan koşul, anahtar deyimindeki değerlerin mantıksal olarak başka bir değeri olamazsa, bir genel işleyici veya bir istisna atmak için iyi bir yerdir.Sadece söyleyerek ... Bu bunu kendiniz test olabilirdi bu soruyu yazmak için aldık sürede

String message = null; 
int outerVariable = getOuterVariable(); 
switch(outerVariable) { 
    case n: 
     statement 1; 
     statement n; 
     break; 
    case n+1: 
     int innerVariable = getInnerVariable(); 
     switch(innerVariable) { 
      case 1: 
       message = "IT WAS 1"; 
       break; 
      default: 
       message = "WHY WOULD YOU DO THIS? OH THE HUMANITY!"; 
     } 
     break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 
+0

sadece yukarıdaki kod hakkında dikkatli olun - eğer java'ya çeviriyorsanız, durum ifadelerinin sabit ifadeler olması gerektiğini unutmayın – Chii

+0

Chii - İyi nokta. Ayrıca, Java 5'in enumlarına anahtar ifadelerinde de izin verilir. – MetroidFan2002

İlgili konular