SORU
25 AĞUSTOS 2011, PERŞEMBE


Java gerçek çözüm yolu: 2 dizeleri 2 Sayı ayrıştırmak ve bunların toplamı dönün

Çok aptalca bir soru. Verilen kod:

public static int sum(String a, String b) /* throws? WHAT? */ {
  int x = Integer.parseInt(a); // throws NumberFormatException
  int y = Integer.parseInt(b); // throws NumberFormatException
  return x   y;
}

Eğer iyi Java olup olmadığını söyleyebilir misiniz? Neden bahsettiğimi, NumberFormatException kontrolsüz bir istisna vardır. Sanayoksum() imza bir parçası olarak belirtin. Ayrıca, anladığım kadarıyla, fikri denetlenmeyen istisnalar sadece sinyal bu programın uygulanması yanlıştır ve hatta daha fazla, alıcı denetlenmeyen istisnalar kötü bir fikir, o zaman gibizamanında kötü programı sabitleme.

Biri olsun lütfen açıkla:

  1. İmzasının bir parçası olarak NumberFormatException belirtmeliyim.
  2. Kendi kontrol istisna (BadDataException) tanımlamak, yöntemin NumberFormatException ve yeniden atmak, ellemek BadDataException olarak etmeliyim.
  3. Kendi kontrol istisna (BadDataException) tanımlamak, düzenli ifadeler gibi iki dizeleri bir şekilde doğrulamak ve benim eğer uymamış olsaydı zaten 10 ** atmalıyım.
  4. Senin fikrin?

Güncelleme:

Düşünün, nedense kullanmanız gereken açık kaynak kodlu bir çerçeve değil. İmzasının bak ve düşün - "TAMAM, hiç atar". Sonra, bir gün, bir istisna var. Normal mi?

Güncelleme 2:

Bazı yorumlar sum(String, String) benim kötü bir tasarım olduğunu söylüyor. Katılıyorum kesinlikle, ama bu özgün sorun sadece eğer iyi bir tasarım olsaydı asla görünür inananlar için, burada ekstra bir soru:

Tanımını şöyle sorun: sayılar Strings olarak depolandığı bir veri kaynağı var. Bu kaynağı ne olursa olsun 2 düzenleme kutuları ile XML dosyası, web sayfası, masaüstü pencere olabilir.

Hedef 2 StringBu s alır, ints dönüştürür ve ileti kutusu görüntüler demenin mantığı uygulamak için "sum xxx".

Bu tasarım uygulamak için kullandığınız yaklaşım ne olursa olsun, olacakiç işlevselliği bu 2 puan var:

  1. int 15 *dönüştürme bir yer
  2. 2 ints ekleyin

Benim orijinal sonrası temel soru şu:

Integer.parseInt() bekliyordoğrudize geçirilecek. Ne zaman bir paskötü bir dize, anlamına gelirprogramınızyanlış ( " . değil ^em>kullanıcıbir aptal"). Bir yandan Tamsayı olduğu kod parçasını uygulamak gerekir.() parseıntSemantik GEREKİRdiğer yandan giriş yanlış olur - bu durumda kabullenmen gerekSemantik GEREKİR.

Yani, kısaca: nasıl uygularımSemantik GEREKİReğer ben sadece eğerKütüphaneler GEREKİR.

CEVAP
25 AĞUSTOS 2011, PERŞEMBE


Bence özel mantık olarak kadar olabildiğince işlemek için tercih olacaktır. Bu nedenle imza tercih ederim

 public static int sum(int a, int b);

Yöntem imzası bulunan bendeğilbir şey değiştirmek. Ya sana

  • Senin yerine prodüktörün algoritma alabilir nerede programlı yanlış değerleri kullanarak
  • ya bu durumda bu modül doğrulama yapmalıdır örneğin, kullanıcı girişi, gönderme değerleri

Dolayısıyla, bu durumda istisna işleme bir hale gelirbelgelersorun.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Keith Anthe

    Keith Anthe

    26 NİSAN 2011
  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008
  • NPR

    NPR

    22 NİSAN 2006