Podmínky   otázka

VB.NET, Algoritmy

Dobrý den,

potřebuji pomoct s podmínkami. Potřebuji následující kód udělat tak aby fungoval.

If (k1(1) = k2(1) = k3(1)) Or (k1(1) <> k2(1) <> k3(1)) Then
            If (k1(2) = k2(2) = k3(2)) Or (k1(2) <> k2(2) <> k3(2)) Then
                If (k1(3) = k2(3) = k3(3)) Or (k1(3) <> k2(3) <> k3(3)) Then
                    If (k1(4) = k2(4) = k3(4)) Or (k1(4) <> k2(4) <> k3(4)) Then
                        MsgBox("super")
                    Else
                        MsgBox("smůla4")
                    End If
                Else
                    MsgBox("smůla3")
                End If
            Else
                MsgBox("smůla2")
            End If
        Else
            MsgBox("smůla1")
        End If
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vidím první věc, na kterou jsem se kdysi dávno nachytal taky.

k1(1) = k2(1) = k3(1)

Zřejmě předpokládáte, že výsledek bude True pouze pokud budou všechny tři hodnoty stejné. Funguje to ale tak, že se nejdřív vyhodnotí k1(1) = k2(1) a potom porovná s k3(1). Takže pokud bude k1(1)=0, k2(1)=0, k3(1)=0, potom výsledek bude False, protože ve skutečnosti se to vyhodnotí jako True = 0 což dává výsledek False.

Stejně tak u operátoru <>.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

A mohu se zeptat jak to mám udělat lépe?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Např.:

If k2(1) = k1(1) AndAlso k3(1) = k1(1) Then
End If

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pořád to nemohu udělat tak aby to fungovalo. Můžete prosím poslat celý nebo alespoň vetší část kódu.

nahlásit spamnahlásit spam -3 / 3 odpovědětodpovědět

Odzkoušejte ty podmínky po částech. Dál bych Vám asi poradil, abyste si jednotlivé "levely" těch podmínek dal do metod.

Např.

private bool IsAvailableAndCheap()
{
return (k(0) == k(1) && k(0) == k(2);
}

private bool IsAvailableAndCheap()
{
....
}

potom v té "hlavní" podmínce budete akorát volat jednotlivé metody:

if(IsAvailableAndCheap())
{
...
} else if(IsAvailableAndExpesive())
{
...
} else
{
...
}

I do budoucna se Vám pak ty podmínky budou lépe spravovat.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Už jsem zjistil, že nefunguje podmínka s rovná se. Ta vrací vždy false. Ta druhá podmínka všechny různé je v pořádku.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Pochopil jste to, co jsem psal v prvním komentáři? Zřejmě ne.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už jsem to poopravil, ale i tak to nefunguje.

    Private Function JeStejne(ByVal cislo As Integer, ByVal k1() As Integer, ByVal k2() As Integer, ByVal k3() As Integer) As Boolean
        If k1(cislo) = k2(cislo) Then
            If k1(cislo) = k3(cislo) Then
                If k2(cislo) = k3(cislo) Then
                    Return True
                Else : Return False
                End If
            Else : Return False
            End If
        Else : Return False
        End If
    End Function
nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Proč to děláte takto debilně, že se v tom nedá vyznat a ne na jeden řádek pomocí AndAlso?

If k2(cislo) = k1(cislo) AndAlso
   k3(cislo) = k1(cislo) Then
  Return True
Else
  Return False
End If

Zřejmě nechápete vůbec nic. Toto jsou nutné základy.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback