2010-07-06 13 views
5

Burada basit bir karşılaştırmayı deniyorum, ödev istediğim gibi çalışmıyor ... BuradaC# Bir soru ile Noob: Int atama beklendiği gibi çalışmıyor

int returnDateIndex(Paragraph para) 
{ 
    long firstIndex = 0; 
    for (int i = 0; i < para.Words.Count; i++) 
    { 
     if (para.Words[i].Text == "Second") 
     { 
      if (para.Words[i - 1].Text == "First") 
      {       
       firstIndex = para.Words[i].FirstSymbolPosition; 
      } 
     } 
    }  
    return (int)firstIndex; 
} 
int returnDateIndex(Paragraph para) 
{ 
    long firstIndex = 0; 
    for (int i = 0; i < para.Words.Count; i++) 
    { 
     if (para.Words[i].Text == "Second") 
     { 
      if (para.Words[i - 1].Text == "First") 
      {       
       firstIndex = para.Words[i].FirstSymbolPosition; 
      } 
     } 
    }  
    return (int)firstIndex; 
} 
hata ayıklayıcımı çalıştırdım ve bu atama çağrıldığında Sağdaki int 50'ye eşitdi, fakat soldaki int, 0'a eşit kaldı. Neyi kaçırdığımı bilmiyorum.

Bu uygulama Abbyy FineReader 9.0 SDK'sini kullanıyor ve FirstSymbolPosition dokümantasyonu salt okunur bir

EDIT döndürdüğünü söylüyor: Görüntüleyenlerin görüntüyü daha kolay görmesini sağlamak için kod tüm özelliklerden sıyrıldı problem şu. Orijinal soruların cevaplarını ve bir yorumu olarak sizi rahatsız eden kodu içeren başka bir şey için teşekkür ederiz.

+0

Değerleri kontrol ettiğinizde nerede kırılıyorsunuz? – asgerhallas

cevap

3

Bariz hata ilk durum dönmek için bekliyor olmasıdır nerede koşullar maç (dolayısıyla ilk Endeksi değişken ismi), ama sen gerçekten son noktayı nereye dönüyoruz onlar maç. Bu da kötü bir şey çünkü maçınızı bulduktan sonra aramaya devam etmeniz anlamına geliyor. Bir diğeri ise, bir cümlede ilk kelime "İkincisi" ise, negatif bir endekse başvurmaya çalışacaksınız, ki bu çok kötü. Bunun yerine şunu deneyin:

int returnDateIndex(Paragraph para) 
{ 
    for (int i = 1; i < para.Words.Count; i++) 
    { 
     if (para.Words[i - 1].Text == "First" && para.Words[i].Text == "Second")       
      return (int)para.Words[i].FirstSymbolPosition; 
    } 
    return 0; // this is what your original code would have returned in a "not found" scenario 
} 

Bu kod, hem hataları hem de ödev sorununuzu tümüyle düzeltir.

+0

Teşekkürler, ama sadece bir kez olur aslında =) var isimleri, sizin için karıştırmak için özür dilerim, soruna uyacak şekilde değiştirildi. –

+0

Bu –

+0

deneyeceğim Bu işe yaradı :) –

1

Bir kenara göre, firstIndex atamanızdan sonra break'u eklemeniz gerekir, aksi takdirde koşullar daha sonra döngüde yerine getirilirse başka bir değerin üzerine yazılabilir.

if (para.Words[i - 1].Text == "First") 

i o zaman olacak 0'a eşitse i 1'e eşit veya daha büyük olduğundan emin olmak için orada hiçbir çek var: ChrisF söylediklerine ek olarak

+0

Öneri için teşekkürler ... Bu kod, buradaki gönderi için en az –

+0

@Josh - yeterince adil. – ChrisF

+1

"İkinci" paragrafın ilk kelimesi "ArrayIndexOutOfBoundsException" değerini alamaz. –

1

, bu oldukça tehlikelidir dizinin dışına indeksleme.

+0

Evet yine orada başka kontroller var, bu sadece birebir kodu hala bozulmamış, teşekkürler –

0

FYI: .net'te karşılaştırmak her zaman beklediğiniz gibi davranmaz. Temel tiplerin karşılaştırılması karmaşık tiplerden farklıdır. Tam sayıları karşılaştırırsanız, içeriğinin bir karşılaştırmasını alırsınız. Nesneleri karşılaştırıyorsanız, nesnenin adresini DEĞİL içerikle karşılaştırıyorsunuz.

+0

Bu sorunun onunla ne ilgisi var? –

İlgili konular