AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi C# Werden weitere Bedingungen geprüft wenn das Ergebnis..
Thema durchsuchen
Ansicht
Themen-Optionen

Werden weitere Bedingungen geprüft wenn das Ergebnis..

Ein Thema von Pseudemys Nelsoni · begonnen am 25. Feb 2006 · letzter Beitrag vom 25. Feb 2006
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 17:07
...schon klar ist?

In Delphi hatte ich folgende Funktion:

Delphi-Quellcode:
function TTokenizer.NumTok(const S: string): Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := 1 to Length(S) do
    if (S[I] <> C) and ((I = 1) or (S[I-1] = C)) then
      Inc(Result);
end;
Sie kann _niemals_ einen Fehler verursachen indem "S[I-1]" kleiner ist als 1, bedingt durch die vorigen Bedingungen.

Ich habe mir den Code nun in C# umgeschrieben:

Code:
        public static int NumTok(string S, char C)
        {
            int Count = 0;

            for(int i = 0; i <= S.Length; i++)
                if(((S[i] != C) && (i == 1)) || (S[i-1] == C))
                    Count++;

            return Count;

        }

Nun bekomm ich ich beim aufruf von:

Code:
textBox1.Text = Tokenizer.NumTok("blubb.jo", '.').ToString();
den Fehler:

Zitat:
Unhandled exception at @($0,$0,$0). Exception class System.IndexOutOfRangeException with message 'Der Index war außerhalb des Arraybereichs.'. Process Project3.exe (90044)
Der Fehler kann nur dadurch kommen, dass weitere Bedingungen auch geprüft werden, wenn das Ergebnis auf jeden Fall schon 100% klar ist. Ist dies so in C#?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#2

Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 17:13
Hallo!

Zum einen schaut mir die Klammerung der beiden Ausdrücke (also Delphi und C#) nicht identisch aus. Kann aber auch täuschen

Zum anderen lässt Du den Index in C# bis zu S.Length laufen. Richtig wäre S.Length-1, weil ja auch schon bei 0 gestartet wird. Also aus dem "<=" ein "<" machen.

Grüße
Christian
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 17:15
Hi,

Code:
if((S[i] != C) && ((i == 1) || (S[i-1] == C)))
Müssten die Klammern nicht so gesetzt werden, damit es wieder auf den Delphi-Code passt?
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#4

Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 17:32
Moin Christian,

mit -1 bekomme ich immernoch den Fehler .

@Spider:

Nope, es muss "entweder die ersten beiden oder nur das letzte" nicht aber "nur das erste oder die letzteren beiden"
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 17:33
fang mal die Exception ab und lass dir im except-Teil den index ausgeben, bei dem die Exception ausgelöst wurde. Wenn dieser bspw. 0 ist wäre das Problem ja relativ klar

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 17:34
Zitat von Pseudemys Nelsoni:
@Spider:

Nope, es muss "entweder die ersten beiden oder nur das letzte" nicht aber "nur das erste oder die letzteren beiden"
Dann ist dein Delphi-Source aber auch falsch
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 17:35
Stimmt, jetzt wo Du(ihr) es sagt... die C# Variante stimmt von den Klammenr her nicht

Danke
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 18:30
Deine Tokenizerfunktionen sind in .Net schlichtweg nicht mehr notwendig.


Code:
string[] tokens = "blubb.jo".Split(new char[1] {'.'});
int countTokens = tokens.Length;
foreach(string token in tokens)
  Console.WriteLine(token);
Oder in meiner fav. .Net-Sprache:
Delphi-Quellcode:
var tokens := 'blubb.jo'.Split(['.']);
var countTokens := tokens.Length;
for token : String in tokens do
  Console.WriteLine(token);
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#9

Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..

  Alt 25. Feb 2006, 19:21
Ahh wow, wusste gar nicht, dass es da sowas gibt - Genial.

Danke ))
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz