[Java] Řazení 4 čísel pomocí podmínek.

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod OS 19. 10. 2006 21:21

Ahoj.
Potřeboval bych poradit se seřazením 4 čísel pomocí podmínek v Javě.

Kód: Vybrat vše
public static void main(String[] args) {
    Scanner sc = new Scanner (System.in);
    int a = sc.nextInt();
    int b = sc.nextInt();
   
    if (a < b) {System.out.printf ("%d, %d", a, b);}
    else
   
        int p = a;
        a = b;
        b = p;
        System.out.printf ("%d, %d%n", a, b);


Zkusil jsem to pro začátek pro 2 čísla, ale hází mi to chybu u
Kód: Vybrat vše
int p = a;
a nevím proč.
Používám NetBeans BlueJ.
Potřeboval bych nějak nakopnout, nějakej tip pro začátek. Asi mi dělá problém syntaxe, protože jsem trošku dělal vve FoxPro a tohle je jiný.
Vřelé díky
OS
Junior

Odeslat příspěvekod yaroukh 19. 10. 2006 21:31

Rekl bych, ze scope toho tveho p tvori prave ten jediny radek, ve kterem ho deklarujes. Na dalsim radku uz ono p pro JVM neexistuje. Mozna prave na to se te snazi NetBeans upozornit. Zivotnost resp. scope promenne je v Jave omezena blokem, ve kterem je deklarovana (takze take neexistuji zadne globalni promenne) ...
A blok po else, ktery neni ohranicen pomoci curly braces, je JEDEN NASLEDUJICI RADEK; ty v tomhle jednom radku svou promennou deklarujes.

Mimochodem mozna by propriste pomohlo, kdybys tu chybu repastnul (sakra proc mam dojem, zes' ji sam ani necetl?) ...
my favourite music: sounds4u.net/?fuID=3
yaroukh
Junior
Uživatelský avatar

Odeslat příspěvekod OS 19. 10. 2006 21:36

No já ti moc nerozumím, jsem v tom naprostý začátečník. Ta chyba by byla to poslední, potřebuji pomoc s tím seřazením, to by bylo tak nějak dobře?
Pro ty 4 čísla už to bude nářez....
OS
Junior

Odeslat příspěvekod OS 19. 10. 2006 21:40

Takže to za tím else je špatně? Čím to mám ohraničit? Tímhle {}?
Ty chyby čtu, ale prd jim rozumím.

Chyba: '.class' expected
not a statement
OS
Junior

Odeslat příspěvekod Kyosuke 19. 10. 2006 21:44

OS píše:Pro ty 4 čísla už to bude nářez....z/quote]


A proč nepoužiješ nějaký hromadný algoritmus? ;-)
Kyosuke
Junior

Odeslat příspěvekod OS 19. 10. 2006 21:50

No je to zadaný domácí úkol, pomocí podmínek, tak proto a navíc nějaký algoritmus ještě vůbec neumím, cykly apod.

No a mám tam ještě nějaké kopance?
OS
Junior

Odeslat příspěvekod benco 19. 10. 2006 22:04

Neviem, ale tak pokial urcis v prvom if ze cislo a<b tak potom v tom cykle else ti staci dat automaticky b<a( teda pokial else nastane). teda myslim
LOCK LOCK LOCK :o
benco
Junior
Uživatelský avatar

Odeslat příspěvekod OS 19. 10. 2006 22:22

Jasně, teď na to koukám a ty bloky po IF a ELSE musej bejt opravdu v těhle {} závorkách, to sem nevěděl. Potom vyzkouším.

A naťukněte to s těmi 4 čísly.....tam jsem dělal taky bloky bez závorek a proto to asi nefachčilo.
Vždy a<=b, b<=c, c<=d a potom vzájemně pro všechna čísla mezi sebou. Potom b<=a a čísla otočit atd.
OS
Junior

Odeslat příspěvekod Nargon 19. 10. 2006 22:25

Kód: Vybrat vše
    int a;
    int b;
   
    if (a < b) {neco}
    else
   
        int p = a;
        a = b;
        b = p;
        System.out.printf ("%d, %d%n", a, b);

Tady je jeden problem, trochu to prepisu aby bylo videt jak to vidi prekladac:
Kód: Vybrat vše
if (a<b)
  {
  neco
  }
  else
  {
    int p=a;
  }
a=b;
b=p;
...

Takze pro radek b=p neni P vubec deklarovano.
Nargon
Moderátor

Odeslat příspěvekod OS 19. 10. 2006 22:34

Jasan ty závorky tam nemám.....

A ty 4 čísla budu porovnávat každé s každým, že? A budu je prohazovat.
OS
Junior

Odeslat příspěvekod logout 19. 10. 2006 22:45

Na to prohazování si napiš funkci, jestli víš, jak na to (jestli ne, tak na to peč). Jinak já bych to dělal:
Najdi největší, dej na začátek,
Najdi největší, dej jako druhý,
....
Využiješ při tom některý porovnání dvakrát (největší najdeš nejlépe jako největší z dvou větších, na druhý největší pak stačí jedno porovnání....) a tím pádem to nebude to tak brutální....
Matyáš
logout
Junior

Odeslat příspěvekod PaLaDiN 20. 10. 2006 07:35

Javu nepoznam cize ziaden kod, ale mohol by si to spravit ako pole 4 cisel a potom na toto by plne stacil s efektivitou aj bubblesorter.
Kód: Vybrat vše
for (int i = 0; i < 4; i++)
{
   for(int j = i; j < 4; j++)
        if (pole[i] > pole[j])
           {
                    int temp = pole[i];
                    pole[i] = pole[j];
                    pole[j] = pole[i];
           }
}
PaLaDiN
Junior
Uživatelský avatar

Odeslat příspěvekod OS 20. 10. 2006 12:31

Díky všem.

Ještě doplním, že funkce neznám, neumím a pole také ne, takže opravdu jen pomocí podmínek. A cykly taktéž ne.
OS
Junior

Odeslat příspěvekod logout 20. 10. 2006 21:17

Místo swap(a,b) doplň prohození hodnot a,b

if(b > a)
swap(a,b);

if(d > c)
swap(c, d);

if(c > a)
swap(a, c);
else
if(c > ....a dál si to domysli....

Matyáš
logout
Junior

Odeslat příspěvekod OS 20. 10. 2006 21:28

No super díky moc, ale jsem asi potížista, ale swap neznám a asi nemůžu použít.
OS
Junior

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků