Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Oneindige loop

Pagina: 1
Acties:

  • Sebazzz
  • Registratie: September 2006
  • Nu online
Goeienacht, :)

Ik probeer zoiets als SIR te maken. SIR is ontworpen zodat als bekent is dat:
a is b;
b is c;
c is d;
d is e, dat het programma dan de conclusie kan trekken dat a gelijk is aan e.

De enige mogelijkheid is dus een recursieve formule. Hier loop ik op vast. Deze geeft namelijk een oneindige loop:
bool Find (subject, informatie)
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        public bool Find(string sub, string inf) { //gerelateerd aan Vraag(...)
            try {
                this.calls++;
                bool success = false;

                foreach ( string s in (List<string>)this.gegevens[sub] ) {
                    if ( s == inf ) {
                        success = true;
                        return true;
                    }

                    if ( this.gegevens.ContainsKey(s) ) {
                        if ( this.Find(sub, inf) ) {
                            success = true;
                            return true;
                        }
                    } else {
                        success = false;
                    }
                }

                if ( !( (List<string>)this.gegevens[sub] ).Contains(inf) && success == false ) {
                    return false;
                }
            }
            catch {
                return false;
            }

            return false;
        }

this.gegevens is een hashtable waarbij de key altijd een string is, en de value altijd lijsten van strings.

Ik doe hier iets fout, of ik heb zowieso al een denkfout gemaakt maar het wil niet werken? Als ik hem laat uitzoeken of c gelijk is aan a lukt het maar anders niet.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

C#:
1
2
 if ( this.gegevens.ContainsKey(s) ) {
  if ( this.Find(sub, inf) ) 


Moet dat niet this.Find(s, inf) zijn?

En wat is het nut van:
C#:
1
2
  success = true;
  return true; 


En waarom die try/catch constructie?

Skill is when luck becomes a habit.


  • Sebazzz
  • Registratie: September 2006
  • Nu online
Zowel die try/catch als die onnodige toewijzing was om wat te testen, maar dat heb ik voor de zekerheid nog niet weggehaalt. Bovendien, als het casten naar een List<string> niet lukt, gooit ie een exceptie.
Moet dat niet this.Find(s, inf) zijn?
:X Ik koop een bril. Bedankt! :)

[ Voor 17% gewijzigd door Sebazzz op 21-04-2008 09:37 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Waarom doe je dan niet this.gegevens.ContainsKey(sub)? Als je al weet waar het fout kan gaan is het netter om dit zelf af te handelen ipv een try/catch binnen je hele procedure.

Skill is when luck becomes a habit.


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 12:15

Haan

dotnetter

Sebazzz schreef op maandag 21 april 2008 @ 09:35:
Bovendien, als het casten naar een List<string> niet lukt, gooit ie een exceptie.
Je kan imo netter oplossen door
C#:
1
2
3
4
5
6
7
8
9
if (gegevens is List<String>)
{
    List<String> list = gegevens as List<String>;
    //ga verder met code
}
else 
{
    return false;
}

of simpeler:
C#:
1
2
3
4
5
6
List<String> list = gegevens as List<String>; //returnt null als het geen List<String> is
if(list != null)
{
    //ga verder
}
else return false;

Kater? Eerst water, de rest komt later


  • Sebazzz
  • Registratie: September 2006
  • Nu online
Ja je hebt misschien wel gelijk :p
Doorgevoerd. Bedankt voor de tip.

Is eigenlijk wel makkelijk om even je code in een try/catch blok te gooien dus ik dacht 'waarom moeilijk doen als het makkelijk kan', maar dat is eigenlijk gewoon try/catch blokken gebruiken waar ze niet voor bedoeld zijn :)

[ Voor 62% gewijzigd door Sebazzz op 21-04-2008 18:31 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]

Pagina: 1