Pouze tento týden sleva až 80 % na e-learning týkající se Javy. Zároveň využij akce až 50 % zdarma při nákupu e-learningu - více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
java week + discount 50

Lekce 7 - Pole v Javě

V předešlém cvičení, Řešené úlohy k 6. lekci Javy, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Dnes si v tutoriálu představíme datovou strukturu pole a vyzkoušíme si, co všechno umí.

Pole

Představte si, že si chcete uložit nějaké údaje o více prvcích. Např. chcete v paměti uchovávat 10 čísel, políčka šachovnice nebo jména 50ti uživatelů. Asi vám dojde, že v programování bude nějaká lepší cesta, než začít bušit proměnné uzivatel1, uzivatel2, ... až uzivatel50. Nehledě na to, že jich může být třeba 1000. A jak by se v tom potom hledalo? Brrr, takhle ne :)

Pokud potřebujeme uchovávat větší množství proměnných stejného typu, tento problém nám řeší pole. Můžeme si ho představit jako řadu přihrádek, kde v každé máme uložený jeden prvek. Přihrádky jsou očíslované tzv. indexy, první má index 0.

Struktura pole

(Na obrázku je vidět pole osmi čísel)

Programovací jazyky se velmi liší v tom, jak s polem pracují. V některých jazycích (zejména starších, kompilovaných) nebylo možné za běhu programu vytvořit pole s dynamickou velikostí (např. mu dát velikost dle nějaké proměnné). Pole se muselo deklarovat s konstantní velikostí přímo ve zdrojovém kódu. Toto se obcházelo tzv. pointery a vlastními datovými strukturami, což často vedlo k chybám při manuální správě paměti a nestabilitě programu (např. v C++). Naopak některé interpretované jazyky umožňují nejen deklarovat pole s libovolnou velikostí, ale dokonce tuto velikost na již existujícím poli měnit (např. PHP). My víme, že Java je virtuální stroj, tedy cosi mezi kompilerem a interpretem. Proto můžeme pole založit s velikostí, kterou dynamicky zadáme až za běhu programu, ale velikost existujícího pole modifikovat nemůžeme. Lze to samozřejmě obejít nebo použít jiné datové struktury, ale k tomu se dostaneme.

Možná vás napadá, proč se tu zabýváme s polem, když má evidentně mnoho omezení a existují lepší datové struktury. Odpověď je prostá: pole je totiž jednoduché. Nemyslím pro nás na pochopení (to také), ale zejména pro Javu. Rychle se s ním pracuje, protože prvky jsou v paměti jednoduše uloženy za sebou, zabírají všechny stejně místa a rychle se k nim přistupuje. Mnoho vnitřních funkčností v Javě proto nějak pracuje s polem nebo pole vrací. Je to klíčová struktura.

Pro hromadnou manipulaci s prvky pole se používají cykly.

Pole deklarujeme pomocí hranatých závorek:

int[] pole;

Slovo pole je samozřejmě název naší proměnné. Nyní jsme však pouze deklarovali, že v proměnné bude pole prvků typu int. Nyní ho musíme založit, abychom ho mohli používat. Použijeme k tomu klíčové slovo new, které zatím nebudeme vysvětlovat. Spokojme se s tím, že je to kvůli tomu, že je pole referenční datový typ (můžeme chápat jako složitější typ):

int[] pole = new int[10];

Nyní máme v proměnné pole pole o velikosti deseti čísel typu int.

K prvkům pole potom přistupujeme přes hranatou závorku, pojďme na první index (tedy index 0) uložit číslo 1.

int[] pole = new int[10];
pole[0] = 1;

Plnit pole takhle ručně by bylo příliš pracné, použijeme cyklus a naplníme si pole čísly od 1 do 10. K naplnění použijeme for cyklus:

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++) {
    pole[i] = i + 1;
}

Abychom pole vypsali, můžeme za předchozí kód připsat:

for (int i = 0; i < pole.length; i++) {
    System.out.print(pole[i] + " ");
}

Všimněte si, že pole má konstantu length, kde je uložena jeho délka, tedy počet prvků.

Konzolová aplikace
1 2 3 4 5 6 7 8 9 10

Můžeme použít zjednodušenou verzi cyklu pro práci s kolekcemi, známou jako foreach. Ten projede všechny prvky v poli a jeho délku si zjistí sám. Jeho syntaxe je následující:

for (datovytyp promenna : kolekce) {
    // příkazy
}

Cyklus projede prvky v kolekci (to je obecný název pro struktury, které obsahují více prvků, u nás to bude pole) postupně od prvního do posledního. Prvek máme v každé iteraci cyklu uložený v dané proměnné.

Přepišme tedy náš dosavadní program pro foreach. Foreach nemá řídící proměnnou, není tedy vhodný pro vytvoření našeho pole a použijeme ho jen pro výpis.

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++) {
    pole[i] = i + 1;
}
for (int i : pole) {
    System.out.print(i + " ");
}

Výstup programu:

Konzolová aplikace
1 2 3 4 5 6 7 8 9 10

Pole samozřejmě můžeme naplnit ručně a to i bez toho, abychom dosazovali postupně do každého indexu. Použijeme k tomu složených závorek a prvky oddělujeme čárkou:

String[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};

Pole často slouží k ukládání mezivýsledků, které se potom dále v programu používají. Když něco potřebujeme 10x, tak to nebudeme 10x počítat, ale spočítáme to jednou a uložíme do pole, odtud poté výsledek jen načteme.

Metody na třídě Arrays

Java nám poskytuje třídu Arrays, která obsahuje pomocné metody pro práci s poli.

K jejímu použití je třeba ji naimportovat:

import java.util.Arrays;

Pojďme se na ně podívat:

sort()

Jak již název napovídá, metoda nám pole seřadí. Její jediný parametr je pole, které chceme seřadit. Je dokonce tak chytrá, že pracuje podle toho, co máme v poli uložené. Stringy třídí podle abecedy, čísla podle velikosti. Zkusme si seřadit a vypsat naši rodinku Simpsnů:

String[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};
Arrays.sort(simpsonovi);
for (String s : simpsonovi) {
    System.out.print(s + " ");
}

Konzolová aplikace
Bart Homer Lisa Maggie Marge

Zkuste si udělat pole čísel a vyzkoušejte si, že to opravdu funguje i pro ně.

binarySearch()

Když pole seřadíme, umožní nám v něm Java vyhledávat prvky. Metoda binarySearch() nám vrátí index prvního nalezeného prvku. V případě nenalezení prvku vrátí -1. Metoda bere dva parametry, prvním je pole, druhým hledaný prvek. Umožníme uživateli zadat jméno Simpsna a poté zkontrolujeme, zda je to opravdu Simpson. Pole musí být opravdu setříděné, než metodu zavoláme!

Scanner sc = new Scanner(System.in, "Windows-1250");

String[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};
System.out.println("Zadej Simpsna (z rodiny Simpsnů): ");
String simpson = sc.nextLine();

Arrays.sort(simpsonovi);
int pozice = Arrays.binarySearch(simpsonovi, simpson);
if (pozice >= 0)
        System.out.println("Jo, to je Simpson!");
else
        System.out.println("Hele, tohle není Simpson!");

Konzolová aplikace
Zadej Simpsna (z rodiny Simpsnů):
Homer
Jo, to je Simpson!

copyOfRange()

Metoda copyOfRange() již podle názvu zkopíruje část pole do jiného pole. Prvním parametrem je zdrojové pole, druhým startovní pozice a třetím konečná pozice. Metoda vrací nové pole, které je výsekem původního pole.

Proměnná délka pole

Říkali jsme si, že délku pole můžeme definovat i za běhu programu, pojďme si to zkusit:

Scanner sc = new Scanner(System.in, "Windows-1250");

System.out.println("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
int pocet = Integer.parseInt(sc.nextLine());
int[] cisla = new int[pocet];
for (int i = 0; i < pocet; i++) {
        System.out.printf("Zadejte %d. číslo: ", i + 1);
        cisla[i] = Integer.parseInt(sc.nextLine());
}
// spočítání průměru
int soucet = 0;
for (int i: cisla) {
        soucet += i;
}
float prumer = soucet / (float)cisla.length;

System.out.printf("Průměr tvých známek je: %f", prumer);

Konzolová aplikace
Ahoj, spočítám ti průměr známek. Kolik známek zadáš?
5
Zadejte 1. číslo: 1
Zadejte 2. číslo: 2
Zadejte 3. číslo: 2
Zadejte 4. číslo: 3
Zadejte 5. číslo: 5
Průměr tvých známek je: 2.6

Tento příklad by šel samozřejmě napsat i bez použití pole, ale co kdybychom chtěli spočítat např. medián? Nebo např. vypsat zadaná čísla pozpátku? To už by bez pole nešlo. Takhle máme k dispozici v poli původní hodnoty a můžeme s nimi neomezeně a jednoduše pracovat.

U výpočtu průměru si všimněte, že při dělení je před jedním operandem napsáno (float), tím říkáme, že chceme dělit neceločíselně. Jistě si vzpomínáte, že při zadávání čísel při dělení jsme při 3 / 2 dostali výsledek 1 a při 3 / 2.0F dostali výsledek 1.5. Zde je princip stejný.

To by pro dnešek stačilo, můžete si s polem hrát.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 1041x (12.31 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Řešené úlohy k 6. lekci Javy
Všechny články v sekci
Základní konstrukce jazyka Java
Přeskočit článek
(nedoporučujeme)
Kvíz - Podmínky, cykly a pole v Javě
Článek pro vás napsal David Čápka
Avatar
Uživatelské hodnocení:
177 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 13 let. Má rád Nirvanu, sushi a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity

 

 

Komentáře

Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:6.10.2012 13:09

Nenapsal jsi, že je potřeba použít import java.util.Arrays;

 
Odpovědět
6.10.2012 13:09
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Jančík:6.10.2012 13:12

Díky za připomínku. Doplněno :)

Odpovědět
6.10.2012 13:12
Zapomeň, že je to nemožné a udělej to ;)
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:6.10.2012 14:09

Touto cestou ještě poděkuji sdracovi za vynikající seriál. Vše z něj dostatečně chápu a mohu si hned vyzkoušet. Skvělá práce ;) Více takových tutoriálů :)

 
Odpovědět
6.10.2012 14:09
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jiri.sverak
David Čápka:6.10.2012 18:27

Díky, jsem rád, že se líbí :)

Odpovědět
6.10.2012 18:27
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:6.10.2012 18:34

Líbí se mi hodně a doufám, že pochopím i OOP, které potřebuji do školy. Programování jsem rozuměl snad jen z knížky od p. Herouta (Programování v C), ale tvoje tutoriály jsou ještě lepší a jsem rád, že se nezdržuješ nepodstatnými věcmi (tedy v rámci začátečníků). Ještě jednou díky ;)

 
Odpovědět
6.10.2012 18:34
Avatar
Kit
Tvůrce
Avatar
Odpovídá na jiri.sverak
Kit:6.10.2012 18:44

Programování v C od Herouta je dobré, ale neuč se od něj OOP. Pecinovský je v OOP lepší.

Odpovědět
6.10.2012 18:44
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
jiri.sverak
Člen
Avatar
jiri.sverak:6.10.2012 18:55

Ok, pokud ho nepochopím od sdraca (čemuž moc nevěřím), zakoupím Pecinovského. Díky za tip.

 
Odpovědět
6.10.2012 18:55
Avatar
JohnyD
Neregistrovaný
Avatar
JohnyD:11.3.2013 18:04

Začínám s programováním, jsem absolutní lama (pominu-li studium zdejších skvělých tutoriálů - Základní konstrukce jazyka Java) a nejsem si jistý, jestli dělám dobře, když začínám přímo s Javou - není to pro začátek příliš velké sousto? Chci se Javu naučit, ale nevím, jestli jsem nepřeskočil nějaké všeobecné základy programování nebo základy jazyka C...

 
Odpovědět
11.3.2013 18:04
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na JohnyD
David Čápka:11.3.2013 18:29

Ne, je to naopak lepší :)

Odpovědět
11.3.2013 18:29
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na JohnyD
Kit:12.3.2013 9:34

Zkus si přečíst knížku "Myslíme v jazyku Java", orig. "Thinking in Java". Začíná obecným objektovým programovacím stylem a plynule přechází do Javy.

Odpovědět
12.3.2013 9:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
sisolpes
Člen
Avatar
sisolpes:28.11.2013 16:25

Víte co je zvláštní?
Pole "Simpsonovi" mi funguje v jednom projektu a v druhém ne (příkaz if funguje pouze v prvním indexu).
Neznáte příčinu?

Odpovědět
28.11.2013 16:25
Alt + 2
Avatar
stairn
Neregistrovaný
Avatar
stairn:8.1.2014 13:38

Nezadáváš někoho jiného z rodinky?
Doporučuji upravit na

String[] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Meggie", "Abraham", "Mona", "Herbert", "Amber", "Chet", "Cyrus", "Stanley", "Tyrone", "Abbie", "Mabel", "Virgil", "Abraham", "Hiram", "Eliza"};

Ono je jich ve skutečnosti ještě trochu víc... ale tohle jsou základní.

 
Odpovědět
8.1.2014 13:38
Avatar
Matěj Kripner:16.1.2014 20:30

Chtěl bych se zeptat, jestli při metodě sort můžu nadefinovat, zda má funkce seřadit např. čísla od nejmenšího po největší, nebo od největšího po nejmenší.

 
Odpovědět
16.1.2014 20:30
Avatar
lincerix
Člen
Avatar
lincerix:3.3.2014 19:19

Dobrý den / ahoj,

mohl by někdo prosím vysvětlit jak přesně funguje

System.out.printf("%s ", s);

.
Mám na mysli "%s" a také proč je použit "printf". Vím, že to v pár článcích nazpět bylo vysvětlováno, ale vůbec jsem to z toho nepochopil.

Jinak tato Java cvičení jsou fantastická. U cvičení pro tento blok jsem tragicky zamrzl, ale zítra to snad už zdárně vyřeším! Nemůžu se už dočkat na OOP sekci! Díky moc!

Odpovědět
3.3.2014 19:19
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
timka511
Člen
Avatar
timka511:19.3.2014 8:50
Integer.parseInt(sc.nextLine())

=

sc.nextInt()
Odpovědět
19.3.2014 8:50
Cokoliv si lidská mysl dokáže představit a čemu dokáže uvěřit, toho lze dosáhnout. (Napoleon Hill)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na timka511
David Čápka:21.3.2014 15:54

Ne, tohle je špatně. nextInt() ti načte jen číslo a nechá tam konec řádku, který uživatel zadal. nextLine() načte obsah i konec řádku. Když to budeš takhle používat, tak brzy narazíš na problémy, protože ty linebreaky ti tam budou zůstávat.

Odpovědět
21.3.2014 15:54
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Martin.mak
Člen
Avatar
Martin.mak:15.4.2014 0:46

Docela dobrý by bylo dodat, že u copyOfRange() nenakopíruje ze Startovací pozice zdrojového pole od Konečné pozice druhého pole, ale prostě do druhého pole nasází všechno od Startovací po Konečnou pozici.. :)

//copyOfRange(ZdrojovéPole, startovní pozice, konečná pozice)
    //kopíruje vše od Startovací pozice až po konečnou pozici
    String[] OblibeniSimpsni = {"Komixák","Milhause","Síímoore"};
    OblibeniSimpsni = Arrays.copyOfRange(simpsonovi, 0, 2);
    for(String s : OblibeniSimpsni)
    {
    System.out.println(s);
    }
 
Odpovědět
15.4.2014 0:46
Avatar
Martin.mak
Člen
Avatar
Odpovídá na Martin.mak
Martin.mak:15.4.2014 0:56

A navíc zbytek pole umaže... Výstup mám pouze Bart, Homer, a to jsem tam dodal ještě 4. pozici .. :)

 
Odpovědět
15.4.2014 0:56
Avatar
Martin.mak
Člen
Avatar
Martin.mak:15.4.2014 1:00

Ale také to může být chyba v programu.. takže raději jako začátečník dodávám celý kompletně spatlaný program..

package pkg7.simpsnovi.arr.w.ays;
import java.util.Arrays;
import java.util.Scanner;
/**
 *
 * @author Martin
 */
public class SimpsnoviArrWAys {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

    Scanner sc = new Scanner(System.in,"windows-1250");
        String[] simpsonovi = {"Homer","Marge","Bart","Lisa","Meggie"};
    //SORT - čísla podle velikost, Stringy podle abecedy
    Arrays.sort(simpsonovi);
    for(String s: simpsonovi)
    {
    System.out.printf("%s ", s);
    }
    int[] IntPole = {2, 3, 4, 5, 1};
    Arrays.sort(IntPole);
        for(int i : IntPole)
        {
        System.out.printf("%d ",i );
        }
    //BINARYSEARCH - vrací index prvního nebo posledního nalezeného prvku,
        //v případě nenalezení vrátí -1
    System.out.println("\n Zadej simpsna (z rodiny simpsnů)");
    String volba = sc.nextLine();
    int pozice = Arrays.binarySearch(simpsonovi,volba);
    if(pozice >= 0)
        System.out.println("Ano tohle je Simpson!");
    else
        System.out.println("Ne tohle není Simpson!");
    //copyOfRange(ZdrojovéPole, startovní pozice, konečná pozice)! Kopíruje část jednoho pole do jiného pole
    //kopíruje vše od Startovací pozice až po konečnou pozici
    String[] OblibeniSimpsni = {"Komixák","Milhause","Skiner","Dedek","Bitches!"};
    OblibeniSimpsni = Arrays.copyOfRange(simpsonovi, 0, 2);
    for(String s : OblibeniSimpsni)
    {
    System.out.println(s);
    }
    // PROMĚNNÁ DÉLKA POLE!
    System.out.println("\n Ahoj spočítám ti průměr známek, kolik známek zadáš?");
    int[] znamky = new int[Integer.parseInt(sc.nextLine())];
        for (int i = 0; i < znamky.length; i++)
        {
        System.out.printf("Zadej prosím %d známku: ", i + 1);
        znamky[i] = Integer.parseInt(sc.nextLine());

        }
    int soucet = 0;
            for (int i : znamky)
            {
            soucet += i;
            }
     float prumer = soucet / (float)znamky.length;
     System.out.println("Průměr tvých známek je: " + prumer);
    }

}
 
Odpovědět
15.4.2014 1:00
Avatar
Martin.mak
Člen
Avatar
Martin.mak:17.4.2014 20:53

Taky by bylo dobré uvést, že foreach neukládá pole. Teď mi na tom ztroskotal kód z Vigenerovi šifry :)

 
Odpovědět
17.4.2014 20:53
Avatar
Odpovídá na Martin.mak
Matěj Kripner:22.4.2014 18:13

Přesně tohle sežralo 2 hodiny mého života, než jsem na to přišel :D

 
Odpovědět
22.4.2014 18:13
Avatar
vrciak1
Člen
Avatar
Odpovídá na Martin.mak
vrciak1:4.5.2014 1:41

Metoda copyofrange kopiruje prvky zo zdrojoveho pola do noveho pola, a to v rozsahu, ktory zadas.
Ak napises

OblibeniSimpsni = Arrays.copyOfRange(simpsonovi, 0, 2);

tak si vlastne prikazal programu, aby do pola OblibeniSimpsni skopiroval 2 prvky z pola simpsonovi a vsetky povodne prvky, ktore boli v poli OblibeniSimpsni sa zahodia.
0 predstavuje index prveho prvku, ktory budes kopirovat z pola simpsonovi, teda v tvojom pripade Bart
2 predstavuje celkovy pocet prvkov noveho pola, teda tvoje nove pole bude mat dva prvky a to Bart a Homer.

S javou zacinam, teda ak som nieco napisal nespravne, tak ma veselo opravte.

 
Odpovědět
4.5.2014 1:41
Avatar
Martin.mak
Člen
Avatar
Martin.mak:6.5.2014 22:06

Aha, dík :)

 
Odpovědět
6.5.2014 22:06
Avatar
Poky
Člen
Avatar
Odpovídá na David Čápka
Poky:20.6.2014 11:45

Kdy je teda lepší použít ?

Integer.parseInt(sc.nextLine())

a kdy zas :

sc.nextInt()
Editováno 20.6.2014 11:46
 
Odpovědět
20.6.2014 11:45
Avatar
Martin Píštěk (Denir):16.9.2015 17:09

Chápu dobře, že když naplňujeme pole ručně pomocí hranatých závorek, nevytváří se nejdříve instance pomocí new?

 
Odpovědět
16.9.2015 17:09
Avatar

Člen
Avatar
:28.9.2015 20:47

Môže mi niekto podrobnejšie vysvetliť čo robí tento cyklus?

for (int i = 0; i < 10; i++)
        pole[i] = i + 1;

Dík

 
Odpovědět
28.9.2015 20:47
Avatar
qwertyW
Tvůrce
Avatar
Odpovídá na
qwertyW:28.9.2015 20:52

Projde pole mezi indexy 0 a 9( menší než 10) a každému prvků přiřadí cislo o jedna vetší než je jeho index.

Odpovědět
28.9.2015 20:52
Programuji, tedy jsem.
Avatar
iqbigbang
Člen
Avatar
iqbigbang:5.1.2016 16:59

Chtěl jsem se zeptat, když chci vypsat pole, jak ho musím nakonvertovat do Stringu?

Odpovědět
5.1.2016 16:59
Say me, why not?
Avatar
Vladislav Domin:5.1.2016 17:29

Preco by si konvertoval pole do Stringu len kvoli jeho vypisaniu?

 
Odpovědět
5.1.2016 17:29
Avatar
iqbigbang
Člen
Avatar
iqbigbang:5.1.2016 18:01

Kvůli výpisu do Text Area ve swingu.

Odpovědět
5.1.2016 18:01
Say me, why not?
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na iqbigbang
pocitac770:5.1.2016 20:00

Úplně stejně, jako je tady popisováno postupné vypisování členů, akorát místo vypisování si je budeš přidávat do Stringu, a ten pak použiješ.

 
Odpovědět
5.1.2016 20:00
Avatar
B42P6
Člen
Avatar
Odpovídá na iqbigbang
B42P6:5.1.2016 20:36

Použi

char array[]={'t','e','x','t'};
String s=String.valueOf(array);
;)
Odpovědět
5.1.2016 20:36
'long long long' is too long for GCC
Avatar
jakubho
Člen
Avatar
jakubho:8.1.2016 18:38
Arrays.sort(simpsonovi);
   for (String s : simpsonovi)
        System.out.printf("%s ", s);

Nechápu tento kus kódu. Když jsem se učil cykly, platilo

for (řídící proměnná; podmínka;zvětšení proměnné o 1)
//příkazy

Jak funguje cyklus v tomto programu nechápu. Potom by mě zajímalo v tomto řádku:

System.out.printf("%s ", s);

Jak funguje "%s ". Když jsem to umazal, vypsalo to simpsny tak, že mezi nimi nebyly mezery, když to tám nechám, tak s mezerami. Toto je tedy jediná věc, kdy toto použít? Jak poznám, kdy bych to měl použít? Navíc v nějakém minulém díle jsem viděl zase "%d ". Záleží tedy na proměnné, kterou chceme upravit tak, aby měly jednotlivá slova ve Stringové proměnné mezi sebou mezery, když se vypíší?

Odpovědět
8.1.2016 18:38
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Vladislav Domin:8.1.2016 18:44

Cyklus, na ktory sa pytas je for each

for (datovy typ premenna : kolekcia)
        // příkazy

Ak by bolo pole celociselne, tak by to vyzeralo nasledovane

int[] pole = new int[dlzka];
for (int názov : pole)

Da sa zapisat aj ako

for(int i = 0; i < pole.length; i++)
        System.out.println(pole[i]);

Viac mas napisane v tomto tutoriali

 
Odpovědět
8.1.2016 18:44
Avatar
jakubho
Člen
Avatar
Odpovídá na Vladislav Domin
jakubho:8.1.2016 18:53

Už chápu, díky :-)

Odpovědět
8.1.2016 18:53
Chyba-Jediná jistota v životě programátora.
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na jakubho
tomisoka:8.1.2016 19:18

Ještě k printf:
ta bere jako parametr string, který má vypsat, přičemž pokud se tam objeví "%x" tak to nahradí dalším parametrem.
"%s" -> parametr použije jako string
"%d" -> parametr použije jako int
(nevím co za chybu to udělá pokud tam bude něco jiného, buď spadne, nebo vypíše blbost)

V tomto případě:

System.out.printf("%s ", s);
"%s " //zformátuje jako
s+ " "

Pokud odstraníš "%s ", bude to vypisovat s a v něm hledat případy jako "%s" (které samozřejmě nenajde).

 
Odpovědět
8.1.2016 19:18
Avatar
Jirka
Člen
Avatar
Jirka:24.3.2016 15:14
int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++)
        pole[i] = i + 1;
for (int i : pole)
        System.out.printf("%d ", i);

je nutné u tohoto kódu psát pole[0] = 1; ? Vypíše mi číselnou řadu i bez tohoto. Případně prosím o vysvětlení, proč to tam musí být? Děkuji

 
Odpovědět
24.3.2016 15:14
Avatar
B42P6
Člen
Avatar
Odpovídá na Jirka
B42P6:24.3.2016 16:18

Nemusí to tam byť, slúži to len k tomu aby si pochopil ako pristupuješ k prvkom poľa. Keď sa pozrieš pozornejšie na prvý for cyklus:

for (int i = 0; i < 10; i++)
        pole[i] = i + 1;

uvidíš že v prvej iterácii uložíš na index 0 ( pole[0] ) hodnotu 1.

Odpovědět
24.3.2016 16:18
'long long long' is too long for GCC
Avatar
filiptartott
Člen
Avatar
filiptartott:17.4.2016 12:26

nechapem tomuto-
sucet + = i;

 
Odpovědět
17.4.2016 12:26
Avatar
mayo505
Tvůrce
Avatar
Odpovídá na filiptartott
mayo505:17.4.2016 12:31

je to skrátený zápis tohoto

sucet = sucet + i;

Proste sa k súčtu pripočíta i

 
Odpovědět
17.4.2016 12:31
Avatar
filiptartott
Člen
Avatar
filiptartott:17.4.2016 13:29

a aki je rozdiel medzi PRINT a PRINTF

 
Odpovědět
17.4.2016 13:29
Avatar
Jiří Vymazal:7.7.2016 14:59

Ahoj, mám dotaz, umazal jsem Arrays.sort(sim­psonovi); a přesto metoda binarySearch funguje, je opravdu potřeba napřed pole setřídit? Díky

 
Odpovědět
7.7.2016 14:59
Avatar
Odpovídá na Jiří Vymazal
Marian Benčat:7.7.2016 20:50

Eh.. To neznamená, že to funguje správně.. Najdi si prosím na internetu, jak funguje binární vyhledávání

Odpovědět
7.7.2016 20:50
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Jiří Vymazal:8.7.2016 11:44

Díky za tip, pomohlo :)

 
Odpovědět
8.7.2016 11:44
Avatar
Lesní Muž
Člen
Avatar
Lesní Muž:8.7.2016 18:47

Asi to sem moc nepatří, ale Davide Čápku, miluji tě.
I když občas nad tím dlouho přemýšlím, asi si koupím body kvůli premium cvičení, potřeboval bych to vysvětlit trochu lépe, což cvičení snad dovedou :-).

 
Odpovědět
8.7.2016 18:47
Avatar
OverHeating
Člen
Avatar
OverHeating:27.8.2016 14:44

Ahoj, mohl by mi prosím někdo vysvětlit, jaký je rozdíl mezi for-each cyklem a normálním for cyklem?
Co vlastně ten for-each cyklus dělá? Ano, vím že tam nahoře to je trošku vysvětlené, ale stejně to moc nechápu. Moc děkuji za všechny odpovědi :)

Editováno 27.8.2016 14:45
 
Odpovědět
27.8.2016 14:44
Avatar
petrph
Člen
Avatar
Odpovídá na OverHeating
petrph:28.8.2016 6:52

Ten rozdíl je v tom, že ti v tom každém cyklu nepředává index na prvek v tom poli se kterým se pak na ten prvek obrátíš (pole[i]), ale přímo hned ten prvek (nějaké referenční x kterým ho máš zpřístupněný).
abys viděl rozdíl, můžeš ten výpis napsat

for (int i = 0; i < 10; i++)  System.out.printf("%d ", pole[i]);

nebo

for (int x : pole)  System.out.printf("%d ", x);

Což je výhodnější když pracuješ s polem objektů. Nemusí tě zajímat ani indexy, ani počet prvků (pole.length), to si právě ten for-each hlídá sám
Pro pole základních typů (čísla, string, a pod.) je to skoro zbytečné. Třeba proto že nemáš k dispozici tu hodnotu indexu takže ani nemůžeš snadno pracovat s okolními prvky pole (a[i+1] = a[i] a přínáší to i jiné problémy. Prakticky k ničemu jinému než takto k jednoduchému výpisu seznamu těch prvků se to u nich nedá použít.

 
Odpovědět
28.8.2016 6:52
Avatar
OverHeating
Člen
Avatar
Odpovídá na petrph
OverHeating:28.8.2016 18:47

Strašně moc děkuju, teď už to chápu

 
Odpovědět
28.8.2016 18:47
Avatar
Bohdan
Člen
Avatar
Odpovídá na Jiří Vymazal
Bohdan:9.10.2016 15:17

Ahoj, ano pole musi byt setrideno, jinak ti metoda nezarucuje, co ti vrati za vysledek. V dokumentaci metody je to popsano: The range must be sorted. If it is not sorted, the results are undefined. If the range contains multiple elements with the specified value, there is no guarantee which one will be found.

Odpovědět
9.10.2016 15:17
Today I will do what others won't, so tomorrow I can accomplish what others can't
Avatar
Miroslav Melzer:12.10.2016 10:54

To založení nového pole pomocí slova "new" se tedy týká jen a pouze "intových" polí?

 
Odpovědět
12.10.2016 10:54
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:12.10.2016 13:22

Ne, to new se váže na pole, a to ať má jakýkoliv datový typ

 
Odpovědět
12.10.2016 13:22
Avatar
Miroslav Melzer:28.10.2016 16:11

Potřeboval bych prosím vysvětlit pár drobností.

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++)
        pole[i] = i + 1;

jak přesně, nebo co tady znamená to pole[i] v posledním řádku? Něco jako že to platí pro všechny prvky pole, že přistupujem hromadně ke všem prvkům ?
Druhá věc je v té proměnné delce pole.

System.out.printf("Zadejte %d. číslo: ", i + 1);
       cisla[i] = Integer.parseInt(sc.nextLine());

Tady to znamená co, to cisla [i] ? Že se to pole plní čísly od uživatele ?
A naposled nechápu proč když se použije "pole.length " , tak pro výpis potom "pole [i]"

for (int i = 0; i < pole.length; i++)
        System.out.printf("%d ", pole[i]);

a když for each cyklus tak jen "i"

for (int i : pole)
        System.out.printf("%d ", i);

Případný vysvětlení prosím spíš tak trochu jako pro debila....

 
Odpovědět
28.10.2016 16:11
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:28.10.2016 17:07

Jde ne o nepochopení pole, ale cyklů (tedy si to radši ještě jednou pročti).
U klasického for cyklu je to "i" proměnná přes kterou řídíme iteraci (procházení), ta se nám logicky (podle nastavených pravidel) postupně zvyšuje, pokaždé toho využijeme a použijeme tu hodnotu. Představ si to tak, že vždy místo toho "i" dosadíš číslo, pokolikáté se to už dělá (začínaje nulou).
Proměnná ve foreach funguje trochu jinak, tam jí nijak nekontrolujeme, vždy se nám dosadí přímo ona hodnota, co je v poli (takže např nemáme jak zjistit, kolikátý prvek to je, nemůžeme ho tedy ani nahradit), je to takové "zjednodušení" pro pouhé procházení pole.

 
Odpovědět
28.10.2016 17:07
Avatar
Miroslav Melzer:28.10.2016 19:39

Dík, to "i" v těch cyklech mi pořád přijde nějaký divný......

 
Odpovědět
28.10.2016 19:39
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:28.10.2016 20:45

Jde o normální proměnnou, zde například typu int (v foreach cyklu při procházení Simpsonů je použit String kvůli typu objektů v poli), kde v klasickém for cyklu s ní nějak pracuješ ty (jako třetí člen v závorce je to, co se má udělat na konci každé iterace, to že je zde i++ neznamená, že tam nemůže být třeba "i = i * 5 - 2", taktéž ji můžeš upravit třeba někde uvnitř bloku).
Ve foreach už s tím nic nemůžeme dělat, protože to ani nemá smysl, v tu chvíli je to proměnná, jejíž obsah při každé iteraci upraví sama Java, aby byl roven dalšímu prvku v poli.

 
Odpovědět
28.10.2016 20:45
Avatar
Miroslav Melzer:1.11.2016 20:04

Jakým způsobem bych naplnil pole desetinnými čísly ? Nebo kdybych chtěl zvyšovat hodnotu o třeba 0.1 ?

 
Odpovědět
1.11.2016 20:04
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:2.11.2016 7:20

Máš to přesně napsáno v mém předchozím komentáři, stačí číst

Jde o normální proměnnou, zde například typu int

Ano, můžeš použít double

to že je zde i++ neznamená, že tam nemůže být třeba "i = i * 5 - 2"

No, tohle mluví samo za vše

Případně, pokud ti to přijde složité, tak můžeš použít nějakou proměnnou mimo cyklus, a vždy ji v každé iteraci upravit o onu hodnotu, ale jde o úplně to samé

Editováno 2.11.2016 7:21
 
Odpovědět
2.11.2016 7:20
Avatar
Miroslav Melzer:2.11.2016 19:14

Proč to nefunguje takhle: ?

double[] pole= new double [10];
     for (double i = 0; i<10; i++)
         pole[i] =  i + 0.1;
     for(double i :pole)
       System.out.printf("%f ", i);

       float [] pole = new float[10];
       for(float i=0F; i<10F; i++)
           pole[i] = i + 0.1;
       for(float i :pole)
           System.out.printf("%f",i);
 
Odpovědět
2.11.2016 19:14
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:2.11.2016 21:32

Protože... Když máš pole, co má 10 míst, tak ho musíš naplnit 10 prvky. A pokud budeš přičítat pořád 0.1 tak

  1. Kolikrát proběhne iterace? No přeci 100x
  2. Jaké indexy to bude vybírat? Ano, i desetinné

V tuto chvíli, ok, spíš jsem se ti snažil odpovědět na konkrétní otázky než na celek, když dojde na realizaci, tak je to už o přemýšlení...
Pokud chceš přes tu samou proměnnou zároveň přistupovat k indexu, a zároveň přičítat k hodnotě, aby jsi pole plnilpo desetinách, tak si budeš muset udělat nějaký konvektor.
Např. budeš mít řídící proměnnou typu int, klasicky přičítat i++, a když budeš potřebovat hodnotu, tak si ji vezmeš jako i/10. Nebo naopak, budeš mít řídící proměnnou double, a budeš si vždy brát index jako i*10.

 
Odpovědět
2.11.2016 21:32
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:2.11.2016 21:38

EDIT: blbě jsem četl, myslel jsem, že v řídícím příkazu (to za druhým středníkem) máš to i += 0.1
V tomto případě si zase uvědom, co se děje. Nejprve je tam 0, a doplníš 0 + 0.1, neboli 0.1. Následně je tam 1, a doplníš 1 + 0.1, neboli 1.1. Zde byl problém v tomto konrétním případě. Jinak pořád platí vše viz výše...

 
Odpovědět
2.11.2016 21:38
Avatar
Oskar Nový
Člen
Avatar
Odpovídá na lincerix
Oskar Nový:21.11.2016 18:48

%d se používá při celá čísla %f pro desetiná a %s pro Stringy (textové řetězce).
Printf musíš použít proto aby ti ty % fungovala.

 
Odpovědět
21.11.2016 18:48
Avatar
Ondřej Polanecký:18.12.2016 21:20

Ahoj.Můžete mi někdo prosím poradit jak napsat ten program na výpočet průměru, ale abych nemusel zadávat kolik známek zadám a sám si zjistil kolik jsem jich zadal. S programováním teprve začínám a tak jak jsem si myslel, že by to mohlo fungovat to nefunguje.

 
Odpovědět
18.12.2016 21:20
Avatar
Filip Razák
Člen
Avatar
Filip Razák:13.1.2017 12:17

Ahoj,

s programovanim zacinam, mohl by mi prosím někdo poradit jaký kod mi pomůže vypsat z pole nejvyšší a druhé nejvyšší číslo?

Díky!

 
Odpovědět
13.1.2017 12:17
Avatar
Filip Gajdos
Člen
Avatar
Filip Gajdos:4.2.2017 15:02

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package znaky;
import java.util.Arrays;

/**
*
* @author filip212
*/
public class Znaky {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

// retazec ktory chcem analyzovat
String ss = "Programátor sa zasekne v sprche, pretože inštrukcie na šampónu boli: Namydliť, umyť, opakovať.";
System.out.prin­tln(ss);
ss = ss.toLowerCase();

//Inicializacia pocitadiel
int pocetSamohlasok = 0;
int pocetSpoluhlasok = 0;

// definicia pola samohlasok a spoluhlasok
String[] samohlasky = {"a", "e", "i", "o", "u", "ä", "á", "é", "í", "ó", "ú", "ia", "ie", "iu", "ô"};
String[] spoluhlasky = {"d", "t", "n", "l", "h", "ch", "g", "h", "k", "ď", "ť", "ň", "ľ", "c", "č", "ž", "š", "dz", "ďz", "m", "b", "p", "v", "z", "s", "f", "r"};

// Hlavny cyklus
for (char c : ss.toCharArray())
{
for (int i = 0; i<15; i++)
{
if (samohlasky[i]­.contains(Strin­g.valueOf(c)))
pocetSamohlasok++;
}

for (int i = 0; i <27; i++)
{
if (spoluhlasky[i]­.contains(Strin­g.valueOf(c)))
pocetSpoluhlasok++;
}
}

//Vypis na konci
System.out.prin­tf("Pocet samohlasok = %d\n", pocetSamohlasok);
System.out.prin­tf("Pocet spoluhlasok = %d\n", pocetSpoluhlasok);
System.out.prin­tf("Pocet nepismennych znakov = %d", ss.length() - (pocetSamohlasok + pocetSpoluhlasok));
}

}

Tento kod mi normalne funguje pokial to mam v cestine vetu aj samohlasky a spoluhlasky dostavam rovnake vysledky ako v clanku pokial to ale prehodim do SVK jayzka dostavam
run:
Programátor sa zasekne v sprche, pretože inštrukcie na šampónu boli: Namydliť, umyť, opakovať.
Pocet samohlasok = 58
Pocet spoluhlasok = 53
Pocet nepismennych znakov = -17BUILD SUCCESSFUL (total time: 0 seconds)

 
Odpovědět
4.2.2017 15:02
Avatar
Filip Gajdos
Člen
Avatar
Odpovídá na Filip Gajdos
Filip Gajdos:4.2.2017 15:13

Pardon postol som do ineho clanku

 
Odpovědět
4.2.2017 15:13
Avatar
Honza B.
Člen
Avatar
Honza B.:6.3.2017 11:11

Ahoj,

mám za úkol:

naplnit pole o n-prvcích náhodnými čísly od 1-10. Poté vyhledejte číslo, které se vyskytlo nejčastěji a kolikrát se vyskytlo..

Počet prvků jsem nastavil tak, že si je zvolí uživatel, poté se pole naplní náhodnými čísly. Při snaze nalézt vhodný způsob, jak zjistit výskyt a počet výskytů onoho nejčastějšího čísla jsem se zasekl. Pole jsem si seřadil s tím, že budu vědět, jak dál, ale bohužel nevím. Můžu poprosit o radu?

import java.util.Arrays;
public class Ukol {
        public static void main (String[] args){
                int m;
                System.out.print("zadej pocet prvků pole: ");
                m = VstupDat.ctiInt();
                System.out.println();
                int[] a = naplnPole(m);
                tiskPole(a);

                System.out.println();

   Arrays.sort(a);
   System.out.println("Seřazené pole:\n");
   for (int cislo : a) {
   System.out.print(" " + cislo + " ");
   }

   System.out.println();

}

        static int[] naplnPole(int m){
                int[] x = new int[m];
                for (int i = 0; i<x.length; i++){
                                x[i] = (int)(Math.random()*10+1);
                }
                return x;
        }

        static void tiskPole(int[] x){
                for (int i = 0; i<x.length; i++){
                                System.out.printf("%3d",x[i]);
                        }
                        System.out.println();
                }
        }

Předem moc děkuju :-)

 
Odpovědět
6.3.2017 11:11
Avatar
Taskkill
Tvůrce
Avatar
Odpovídá na Honza B.
Taskkill:6.3.2017 11:30

Pokud sis ho seřadil, tak stačí cyklem projít každý prvek.
Před cyklem si vytvořit své proměnné, nejcastejsi_cislo a pocet_vyskytu a favorit a pocet_noveho_fa­vorita.
Inicializovat nejcastejsi_cislo na první hodnotu seřazeného pole a pocet_vyskytu na 1.
Pak v každém průchodu cyklu zkontroluj jestli současná hodnota pole je stejná jako tvoje nejčastější číslo, pokud ano zvětši počet výskytu. Pokud ne, umísti tohle číslo do favorita a zvětši mu výskyt. Pokud při dalším průchodu zjistíš že se favorit změnil, změn favorita a vynuluj, respektive vyjedničkuj mu počet. Pokud nějaký favorit překoná nejčastější číslo, změn nejčastější číslo a změn jeho počet.

Jsem na mobilu, takže bez kódu, sry.
Ale mohl jsi použít fórum.

Editováno 6.3.2017 11:30
 
Odpovědět
6.3.2017 11:30
Avatar
Honza B.
Člen
Avatar
Odpovídá na Taskkill
Honza B.:6.3.2017 12:16

Děkuji, zkusím to, ještě dám vědět :-) A omlouvám se, přesunu se do fóra, nedocvaklo mi to..

 
Odpovědět
6.3.2017 12:16
Avatar
Kuba
Člen
Avatar
Kuba:6.5.2017 17:23

Ahoj,

nějak si nevím rady, dávám dohromady program na výpočet mediánu, ale mám tam nějakou kravinu, sice mi to správně vypíše číselné pořadí polí ve středu, ale vypíše to nějak nesmyslně hodnoty. Může se mi na to někdo mrknout? Jde o výpočet mediánu v případě zadání sudého počtu prvků.

Děkuji!

package median;
import java.util.Scanner;
import java.util.Arrays;
public class Median{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in, "Windows-1250");
        System.out.println("Ahoj, zadej prvky, určím medián");
        System.out.println("Napiš počet prvků:");
        int pocet = Integer.parseInt(sc.nextLine().trim());
        int[] prvky = new int[pocet];
        System.out.println("Nyní zadej hodnoty:");
        for (int i = 0; i < pocet; i ++){
            System.out.printf("Zadej hodnotu %d. prvku:", i + 1);
            prvky[i] = Integer.parseInt(sc.nextLine().trim());
            Arrays.sort(prvky);
        }

        for (int vystup : prvky){
        }
        if (pocet % 2 == 1){        //lichý

            }
            else {                      //sudý
                int x1 = pocet/2 ;
            int x2 = (pocet/2+1);
            //zkouška
            System.out.printf("Střední pole jsou %d. a %d.\nHodnoty v polích jsou %d a %d", x1, x2, prvky[x1], prvky[x2]);

            float medianS = prvky[x1] + prvky[x2];
            medianS = medianS / 2;
            System.out.println();
            System.out.printf("Medián je: %.2f", medianS);

        }
    }
}
 
Odpovědět
6.5.2017 17:23
Avatar
Atrament
Supertvůrce
Avatar
Odpovídá na Kuba
Atrament:6.5.2017 18:08

To proto, že při každém vložení prvku do pole 'prvky' to pole zároveň seřadíš pomocí Arrays.sort. Seřaď to pole až poté co v něm máš všechny prvky. (Prostě to Arrays.sort(prvky) posuň o dva řádky dolů).

 
Odpovědět
6.5.2017 18:08
Avatar
Kuba
Člen
Avatar
Odpovídá na Atrament
Kuba:6.5.2017 22:12

Dobře děkuji, ale stále mi to píše prvek o jeden výš, chybí tam nějaký detail ohledně počítání od 0, a zároveň od 1, ale nemůžu přijít na to co to je.

Výstup je:
Ahoj, zadej prvky, určím medián
Napiš počet prvků:
4
Nyní zadej hodnoty:
Zadej hodnotu 1. prvku:15
Zadej hodnotu 2. prvku:5
Zadej hodnotu 3. prvku:10
Zadej hodnotu 4. prvku:20
Střední pole jsou 2. a 3.
Hodnoty v polích jsou 15 a 20
Medián je: 17,50

Přitom 2. a 3. prvek má být logicky 10 a 15

 
Odpovědět
6.5.2017 22:12
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Kuba
gcx11:6.5.2017 22:34

Ahoj, promysli si, co dělá algoritmus.
Seřazené prvky jsou 5, 10, 15, 20.

int x1 = pocet/2

x1 bude 2, protože pocet/2 = 4/2
x2 je o jednu větší, takže 3
-> prvek s indexem 2 (15), prvek s indexem 3 (20).
Takže musíš ještě odečíst jedničku u obou indexů.

 
Odpovědět
6.5.2017 22:34
Avatar
Kuba
Člen
Avatar
Odpovídá na gcx11
Kuba:7.5.2017 18:21

Děkuji ti.

 
Odpovědět
7.5.2017 18:21
Avatar
Michal Athanasios Devecka:21.6.2017 11:28

Programik ktory nacita zoznam mien, ulozi ich do pola, zoradi a nasledne vypise podla abecedy. Velmi rychlo som to pochopil - tieto lekcie su fakt bomba. Po prvom precitani som to dokazal napisat - akurat naucit sa presnu syntax chce este popracovat. niekedy musim snorit.

package hladaj.v.poli;
import java.util.Arrays;
import java.util.Scanner;

public class HladajVPoli {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String [] mena = new String [5];
Scanner sc = new Scanner(System.in, "Windows-1250");

for (int i = 0; i < 5; i++) {
System.out.prin­tln("Zadaj meno: ");
String citacka;
citacka = sc.nextLine();
mena [i] = citacka;
}

Arrays.sort(mena);

for (String s: mena) {
System.out.print (s + " ");

}
}

}

 
Odpovědět
21.6.2017 11:28
Avatar
Maroš Škumát:15.8.2017 18:41

Jednu vec nechápem vysvetluješ tu ako programovať ukážeš nejaký kus kódu napíšeš toto budeme robiť takto a takto potom je tam nejaký kúsok kódu a ty ho nevysvetlíš ale iba tím sa nemusíme zaoberať to sa dozvieme neskôr, neskôr to aj tak nevysvetlíš takto to je v každom jednom diely a potom je človek z toho kokot

 
Odpovědět
15.8.2017 18:41
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Maroš Škumát
David Čápka:15.8.2017 18:45

Když něco kritizuješ, musíš uvést konkrétní příklad. Jen tak se s tím dá něco dělat. Nevím o tom, že by se tu něco nevysvětlovalo, lidé odsud chodí rovnou do zaměstnání a jsou vysoce spokojení. Hlavně, že jsi sprostý, což spíše naznačuje, že jsi se zasekl někde na začátku a logicky pak nechápeš vysvětlení v dalších článcích.

Editováno 15.8.2017 18:46
Odpovědět
15.8.2017 18:45
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Maroš Škumát:15.8.2017 19:11

Dobre tak slušne :D čo znamená slovíčko "new"

 
Odpovědět
15.8.2017 19:11
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Maroš Škumát
David Čápka:15.8.2017 19:26

Cituji článek:

Použijeme k tomu klíčové slovo new, které zatím nebudeme vysvětlovat. Spokojme se s tím, že je to kvůli tomu, že je pole referenční datový typ (můžeme chápat jako složitější typ).

Co na tom nechápeš? Složitější typy se v Javě prostě inicializují slovíčkem new. Na tvé úrovni to lépe vysvětlit nelze. Objekty se zabývá až navazující kurz.

Editováno 15.8.2017 19:26
Odpovědět
15.8.2017 19:26
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Maroš Škumát:16.8.2017 20:20

na vypísanie toho poľa sa môže použiť aj takýto kód alebo je na ňom niečo zle ? :)

package polia.v.jave;

/**
 *
 * @author MarošŠkumát
 */
public class PoliaVJave {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       int[] pole = new int[10];
       pole[0] = 1;
       for (int i = 0; i < 10; i++)
       {
        pole[i] = i + 1;
        System.out.print(pole[i] + " ");
       }
 }
}
 
Odpovědět
16.8.2017 20:20
Avatar
Odpovídá na Maroš Škumát
Michal Šmahel:16.8.2017 20:40

Ahoj, úplně nevím, co myslíš.

Klasický for cyklus, který prochází pole je vlastně stejný jako for each (používaný v článku). Je to tedy správně.

Jen bych měl menší výhradu, chtělo by to více zobecnit. Konečný index nastavuj podle velikosti pole.

int[] pole = new int[10];
pole[0] = 1;

// Konečný index je roven velikosti pole
for (int i = 0; i < pole.length; i++) {
    pole[i] = i + 1;
    System.out.print(pole[i] + " ");
}
Odpovědět
16.8.2017 20:40
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Michal Šmahel:16.8.2017 20:46

Ještě abych to doplnil. To pole je tam trochu zbytečné, šlo by ho úplně vypustit.

for (int i = 1; i <= 10; i++) {
    System.out.print((i + 1) + " ");
}
Odpovědět
16.8.2017 20:46
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Maroš Škumát:24.8.2017 20:29

čo presne robí ten cyklus foreach, a načo presne slúži ?

 
Odpovědět
24.8.2017 20:29
Avatar
Moss
Člen
Avatar
Odpovídá na Maroš Škumát
Moss:24.8.2017 20:48

Cyklus foreach sluzi na prejdenie vsetkych prvkov v poli. Funguje to takto: for (datovyTypPola x : pole): do premennej x sa uklada hodnota prvku pola, ktory je na rade, s ktorym mozes pracovat.

 
Odpovědět
24.8.2017 20:48
Avatar
Michal Stisek:6.9.2017 14:38

V článku je napsáno: Nebo např. vypsat zadaná čísla pozpátku? a mě by zajímalo, jakým způsobem se dají vypsat hodnoty z pole od největšího po nejmenší, nebo např. stringy abecedně pozpátku. Může mě někdo zasvětit? Díky

Odpovědět
6.9.2017 14:38
Jít pořád dál má smysl
Avatar
Odpovídá na Michal Stisek
Michal Šmahel:6.9.2017 15:07

Ahoj, výpis hodnot pole pozpátku je vcelku jednoduché. Stačí nastavit počáteční index na velikost pole - 1.

// Vytvoření pole
Int[] pole = new int[10];

// Projití pole od nejvyššího indexu k nejnižšímu
For(int i = pole.length - 1; i >= 0; i++) {
   System.out.println(pole[]);
}
Odpovědět
6.9.2017 15:07
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Michal Šmahel:6.9.2017 15:14

Co se týče textových řetězců, tam lze využít rozsekání na pole jednotlivých znaků a následné spojení znaků zpět na řetězec při přicházejí pole pozpátku.

Alternativně lze využít metodu na třídě StringBuffer, což je daleko jednodušší.

Ještě oprava předchozího komentáře:

For(int i = ...; i >= 0; i--) {...}
Odpovědět
6.9.2017 15:14
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Michal Stisek:6.9.2017 15:56

Díky moc za odpověď, ta dekrementace mi došla, jen nechápu proč musí být délka pole -1, když jsem napsal

for(int i = pole.length; i > 0; i--)

tak mi to háže error, přitom mi přijde, že by měl cyklus začít na poslední hodnotě pole a pak opakovat cyklus podle počtu indexů?
Nebo je to tím, že pole začíná 0, při deseti indexech končí 9 a v cyklu int i má hodnotu 10 proto to -1? Aby dokázal vytáhnout poslední hodnotu z 9 (posledního) indexu pole?

Odpovědět
6.9.2017 15:56
Jít pořád dál má smysl
Avatar
Odpovídá na Michal Stisek
Michal Šmahel:6.9.2017 17:11
Pole.length

Tohle ti vrátí počet prvků v poli (tj. 10). Pole se indexuje od 0, tzn., že obsahuje indexy 0-9. Poslední je tedy (počet prvků v poli - 1) kvůli indexování od nuly.

Odpovědět
6.9.2017 17:11
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Karel Dyntar
Člen
Avatar
Karel Dyntar:8.9.2017 14:18

Snažím se vytvořit pole, jehož velikost není pevně stanovena, a které by se naplnilo náhodnými čísly z vlastního rozsahu. Narazil jsem na problém, že se pole plní větším množstvím hodnot.

System.out.prin­t("Zadejte počet výsledků: ");
pocet = new int[sc.nextInt()]; // Načete délku pole. Rozsah.

for (int i=0; i<pocet.length ; i++){ // Cyklus, který běží do naplnění pole.

Random random = new Random();
for (int idx = 1; idx <= pocet.length; ++idx){
showRandomInte­ger(START, END, random);
}
}

 
Odpovědět
8.9.2017 14:18
Avatar
Rico ThreeDmax:21.9.2017 14:39

Me zas nefunguje ten jednoduchy priklad Arrays.sort na setrideni a vypsani simpsnu pritom dalsi priklad normalne funguje. Cumel sem dotoh miliardkrat a srovnaval s kodem v clanku a porad se tomu zkurvencovi neco nelibi a haze chybu

 
Odpovědět
21.9.2017 14:39
Avatar
Rico ThreeDmax:21.9.2017 14:42

Kod

 
Odpovědět
21.9.2017 14:42
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Rico ThreeDmax
pocitac770:21.9.2017 16:57

Důvod je, že Java nepodporuje používánj dvou tříd se stejným Aliasem najednou (pojmy pochopíš později), důvod je ten, že importuješ třídu Arrays do třídy Arrays, java neví, kterou myslíš, když ji chceš použít. Řešení? Změníš název té třídy přes refactor (jedna z možností, když na ni ve stromu souborů klikneš pravým)

 
Odpovědět
21.9.2017 16:57
Avatar
Rico ThreeDmax:22.9.2017 19:40

Jo nazev souboru tedy myslis asi. ( pri zakladani projektu ctrl+shift+N)Pro­toze dalsi priklad jsem importoval stejne a funguje. Akorat jsem mu dal nazev arrays2 tusim

Editováno 22.9.2017 19:42
 
Odpovědět
22.9.2017 19:40
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Rico ThreeDmax
pocitac770:23.9.2017 0:00

Hlavně nejde o název souboru, nýbrž hlavně o toto... Jak říkám, pochopíš později

 
Odpovědět
23.9.2017 0:00
Avatar
Rico ThreeDmax:23.9.2017 10:32

Fakt jo covece funguje. Diky ti moc

 
Odpovědět
23.9.2017 10:32
Avatar
Odpovídá na Rico ThreeDmax
Rico ThreeDmax:23.9.2017 11:06

Nevis proc tento radek je pred for cyklem? Vynechal jsem ho a okomentoval a funguje stejne

 
Odpovědět
23.9.2017 11:06
Avatar
Odpovídá na Rico ThreeDmax
Matúš Olejník:23.9.2017 11:43

To je len inicializácia prvej hodnoty v poli, keďže však Java defaultne nastavuje do int premenných hodnotu 0 tak to funguje aj bez toho.

Odpovědět
23.9.2017 11:43
/* I am not sure why this works but it fixes the problem */
Avatar
Rico ThreeDmax:23.9.2017 23:15

v samotnym cyklu je do promenne dana nula tak proto nad tim premyslim.

 
Odpovědět
23.9.2017 23:15
Avatar
Norbert Hrdlicka:16.7.2018 13:13

nechce mi fungovat, int[ ] pole = new int [10] ,
co s tím mám dělat?

 
Odpovědět
16.7.2018 13:13
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Norbert Hrdlicka
David Čápka:16.7.2018 13:26

Přečíst si chybovou hlášku.

Odpovědět
16.7.2018 13:26
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Odpovídá na Norbert Hrdlicka
Neaktivní uživatel:16.7.2018 14:17

Nemáš třeba místo středníku čárku/nic? Podle toho jak jsi to napsal to vypadá, že ano.

Odpovědět
16.7.2018 14:17
Neaktivní uživatelský účet
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Norbert Hrdlicka
pocitac770:16.7.2018 16:32

Také možnost, že tam máš napsáno opravdu [ ], mezi těmi závorkami nemá být mezera

 
Odpovědět
16.7.2018 16:32
Avatar
Odpovídá na David Čápka
Norbert Hrdlicka:17.7.2018 7:57

Exception in thread "main" java.lang.Run­timeException: Uncompilable source code - not a statement
at pole.Pole.main(Po­le.java:22)
C:\Users\blan­ka\AppData\Lo­cal\NetBeans\Cache\8­.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

toto je chybová hláška co mi vyjela bohužel nevím co sní :(

 
Odpovědět
17.7.2018 7:57
Avatar
Odpovídá na Norbert Hrdlicka
Matúš Olejník:17.7.2018 9:34

Choď do Pole.java na riadok 22, celý ho skopíruj a vlož sem.

Odpovědět
17.7.2018 9:34
/* I am not sure why this works but it fixes the problem */
Avatar
Jakub Říman:12.10.2018 9:37

Ahoj, není mi jasný tento příklad:

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++) {
pole[i] = i + 1;
}

Proč je tam ten druhý řádek pole[0] = 1; ? Vždyť cyklus pod ním stejně ten první index naplní...

 
Odpovědět
12.10.2018 9:37
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Jakub Říman
pocitac770:12.10.2018 13:14

To tam nepatří normálně, je to jenom ukázka toho, že to dělá jedno a totéž

 
Odpovědět
12.10.2018 13:14
Avatar
Odpovídá na pocitac770
Jakub Říman:13.10.2018 17:08

Díky. A ještě mám jeden dotaz. Zkoušel jsem si napsat program, kde zadám délku pole (stringy) a program mi následně vypíše, co jsem zadal:

package pracespolem;

import java.util.Scanner;

public class PracesPolem {

public static void main(String[] args) {
Scanner sc = new Scanner (System.in, "Windows-1250");
System.out.prin­tln("Zadej počet prvků pole");
int pocetprvku = Integer.parse­Int(sc.nextLi­ne());
String pole[] = new String[pocetprvku];

for(int i = 1; i <= pocetprvku; i++)
{
System.out.prin­tln("Zadej" + i + ". prvek");
pole[i] = sc.nextLine();
}
System.out.prin­tln("Nyní ti vypíšu, co všechno jsi zadal:");
for (String j : pole)
{
System.out.print(j + " ");
}

}
}

Program se spustí, ale když má vypsat, že mi nyní zopakuje, co jsme napsal, tak spadne a hodí hlášku: "Exception in thread "main" java.lang.Arra­yIndexOutOfBou­ndsException: 2
at pracespolem.Pra­cesPolem.main(Pra­cesPolem.java:22)
C:\Users\Jakub\Ap­pData\Local\Net­Beans\Cache\8­.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 7 seconds)"

ať koukám, jak koukám, nevím, čím to může být. Moc děkuju za případné rady!

 
Odpovědět
13.10.2018 17:08
Avatar
LeNa
Člen
Avatar
Odpovídá na Jakub Říman
LeNa:13.10.2018 18:18

V cyklu jsi vylezl mimo pole.

 
Odpovědět
13.10.2018 18:18
Avatar
Odpovídá na Jakub Říman
Matúš Olejník:13.10.2018 18:19

Ak si poriadne prečítaš tento článok zistíš že indexovanie prvkov v poli začína od 0. Takže keď v takomto cykle, kde i je index v tvojom poli,

for(int i = 1; i <= pocetprvku; i++)

vkladáš údaje do poľa tak pri poslednom načítaní ti vyhodí tvoju chybu pretože ideš ukladať niečo mimo rozsah tvojho poľa. Preto si uprav ten cyklus takto

for(int i = 0; i <  pocetprvku; i++)
Odpovědět
13.10.2018 18:19
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá na Matúš Olejník
Jakub Říman:13.10.2018 18:28

Díky moc!!! Jak zjišťuji, tak v programování hořím hlavně na takovýchto chybách z nepozornosti, na které pk nemohu přijít, protože je hledám úplně někde jinde - v samotném algoritmu řešení.

 
Odpovědět
13.10.2018 18:28
Avatar
Odpovídá na Jakub Říman
Matúš Olejník:13.10.2018 18:32

To prejde :D Ale keď klikneš na tú chybu tak sa ti nastaví kurzor na riadok

pole[i] = sc.nextLine();

a dokonca chyba s názvom ArrayIndexOutOf­BoundsExcepti­on ti naznačuje že sa snažíš robiť niečo s polom na indexe ktorý je mimo vyhradené miesto :)

Odpovědět
13.10.2018 18:32
/* I am not sure why this works but it fixes the problem */
Avatar
Fíla N.
Člen
Avatar
Fíla N.:5.11.2018 20:28

Ahoj,
u BinarySearch se píše, že pokud nenalezne prvek v poli, že ta metoda vrátí -1. Mně vrací spíše nějaké záporné číslo, ale spíš tak jako dost random. Čím to je?

Nicméně ta podmínka i tak zafunguje (proměnná >= 0). Já jen, že když si nechám vypsat proměnné/proměnnou, tak tam není -1, ale třeba -6.
Zkoušel jsem na svém kódu ze cvičení i tady přímo váš kód pouštět u sebe v netbeans.

Díky

 
Odpovědět
5.11.2018 20:28
Avatar
Daniel Holánek:26.11.2018 16:28

(y)

Editováno 26.11.2018 16:29
 
Odpovědět
26.11.2018 16:28
Avatar
Gemy
Člen
Avatar
Gemy:1.8.2019 20:16

// spočítání průměru
int soucet = 0;
for (int i: cisla) {
soucet += i;
}

Nějaká dobrá duše co mi vysvětlí co dělá for .. a co je to " += " ???

Odpovědět
1.8.2019 20:16
Člověk stvořil logiku, a proto jedná v afektu.
Avatar
Odpovídá na Gemy
Martin Havelka:1.8.2019 20:52

For je syntaxe javy pro iteraci pole. To znamená že pro každý prvek pole provede něco. int i je deklarace proměnné, která v sobě v každé iteraci nese hodnotu aktuálního prvku.

proměnná += něco

je jen zkrácená syntaxe pro:

proměnná = proměnná + něco
 
Odpovědět
1.8.2019 20:52
Avatar
Marcel Mares
Člen
Avatar
Marcel Mares:22.8.2019 12:39

chci se zeptat - v programu JeSimpson, kde po zadání jména simpsona uživatelem se vypíše ano nebo není to simpson, se snažím za string s nebo simpsonovi dát .toLowerCase, aby uživatel mohl zadat jméno Bart jako bart a byl to simpson, ale vždy mi to ukáže chybu, že to na pole stringů nelze použít - jak toho mohu docílit

 
Odpovědět
22.8.2019 12:39
Avatar
Odpovídá na Marcel Mares
Michal Müller:31.8.2019 20:35

musíš dať príkaz toLowerCase() až do parametru Arrays.binarySearch ako druhý prvok..
asi takto som to mal ja:
int pozice = Arrays.binary­Search(Simpso­novci,simpson­.toLowerCase());

 
Odpovědět
31.8.2019 20:35
Avatar
Marcel Mares
Člen
Avatar
Odpovídá na Michal Müller
Marcel Mares:1.9.2019 8:58

jo, funguje to, díky moc za radu

 
Odpovědět
1.9.2019 8:58
Avatar
Tano7
Člen
Avatar
Odpovídá na Michal Müller
Tano7:10.9.2019 21:11

Nefunguje to.

Odpovědět
10.9.2019 21:11
Život by byl mnohem snazší, kdybychom k němu měli zdrojový kód.
Avatar
Odpovídá na Tano7
Matúš Olejník:10.9.2019 23:46

Tak keď spravíš to, že v mene ktoré hľadáš prevedieš všetky písmená na malé tak treba mať aj v tom poli "simpsonovi" mená napísané len malými písmenami.

Odpovědět
10.9.2019 23:46
/* I am not sure why this works but it fixes the problem */
Avatar
Jan Béňa
Člen
Avatar
Jan Béňa:3.10.2019 22:44

Prosím, nějaká dobrá duše. Co by mi vysvětlila, jak vypsat v poli Stringy místo intů. Zjistil jsem, že víceméně až do kapitoly s poli mi bylo vše jasné. Tak jsem si v práci říkal, že bych si doma zkusil vypsat pole se jmény pro moji budoucí databázi jmen. Ve které bych pak náhodně generoval jména. Pochopitelně až bych došel do OOP, kde jsem zahlédnul nahodný generátor(kostka). Bohůžel jsem ztroskotal jen na pouhém vypsání jmen do pole.Přikládám dva asi z 50 možností co jsem zkoušel. Tyhle dva sice neukazují chybu, ale program i přesto spadne :D.

String[] jmena= {"Black","Whi­te","Reed","McDo­nald","Storm"};
System.out.prin­tln(jmena[0]);

A nebo ...

String[] jmena= new String[1];
jmena[0]= ("Black");
jmena[1]= ("White");
System.out.prin­tln(jmena[1]);

Předem děkuji za pomoc.

 
Odpovědět
3.10.2019 22:44
Avatar
Jan Béňa
Člen
Avatar
Odpovídá na Jan Béňa
Jan Béňa:3.10.2019 23:03

Tak beru zpět to první funguje, měl jsem tam navíc složenou závorku, která mi tam asi dělala paseku. Jinak děkuji za skvělé stránky. Palec nahoru.

 
Odpovědět
3.10.2019 23:03
Avatar
Odpovídá na Jan Béňa
Matúš Olejník:3.10.2019 23:21

Ahoj, áno prvý spôsob ti bude fungovať a v tom druhom ti hodí chybu už pri

jmena[1] = ("White"); //tie zátvorky sú tu zbytočné

je to preto, lebo týmto príkazom

String[] jmena = new String[N]; //kde v tvojom prípade N = 1

hovoríš, že chceš aby sa do poľa jmena zmestil len N počet mien. No a ako už vieš indexovanie začína od nuly takže hodnoty môžeš vkladať na indexy od 0 po N - 1. Keďže ty si si tam deklaroval pole o veľkosti 1 tak nemôžeš už vkladať údaje na index 1 a viac.
Keď chceš aby ti prešiel aj druhý spôsob tak môžeš napr. zmeniť deklaráciu na

String[] jmena = new String[2];

prípade inú, tebou potrebnú, veľkosť :)

Odpovědět
3.10.2019 23:21
/* I am not sure why this works but it fixes the problem */
Avatar
Jan Béňa
Člen
Avatar
Odpovídá na Matúš Olejník
Jan Béňa:3.10.2019 23:47

Aha já s tím právě počítal že v programování začíná od nuly proto jsem tam na deklaraci napsal 1 teď když jsi to tak pěkně napsal si uvědomuji že by to byla blbost. Jsem to asi prehlednul. Nicméně děkuji za odpověď pomohla mi. Databázi bych měl teď ještě se naučit to náhodně generovat ale tam budu muset ještě dojít a ještě jednou děkuji za odpověď.

 
Odpovědět
3.10.2019 23:47
Avatar
Tano7
Člen
Avatar
Odpovídá na Tano7
Tano7:7.10.2019 19:41

Už kód po úpravě funguje krásně. změna na int pozice = Arrays.binary­Search(simpso­novi, simpson.toLower­Case());
if (pozice <= 0)

package lekce4;

import java.util.Arrays;
import java.util.Scanner;

public class lekce4 {

    public static void main(String[ ] args) {
Scanner sc = new Scanner(System.in, "UTF-8");

String[ ] simpsonovi = {"Homer", "Marge", "Bart", "Lisa", "Maggie"};
System.out.println("Zadej Simpsna (z rodiny Simpsnů): ");
String simpson = sc.nextLine();

Arrays.sort(simpsonovi);
int pozice = Arrays.binarySearch(simpsonovi, simpson.toLowerCase());  /**Arrays.binarySearch(z jakeho pole, co hledam)  */
if (pozice <= 0)
{
    System.out.println("Jo, to je Simpson!");
} else
{
    System.out.println("Hele, tohle není Simpson!");
}

}
}
Odpovědět
7.10.2019 19:41
Život by byl mnohem snazší, kdybychom k němu měli zdrojový kód.
Avatar
Odpovídá na Tano7
Matúš Olejník:7.10.2019 20:53

A to už podľa čoho si si povedal, že to funguje správne?

V poli simpsonovi máš mená ktoré začínajú veľkými písmenami a potom keď ideš hľadať či sa v ňom nachádza požadované meno tak v ňom zmeníš všetky písmená na malé a to hľadáš. Už len tu je jasné, že niečo nie je dobre a asi slovo "Bart" nebude to isté ako "bart".

A keby aj hej tak máš potom podmienku, o ktorej tvrdíš, že vyriešila tvoj problém

if (pozice <= 0)

Keď pozreš dokumentáciu k binarySearch tak v nej je napísané

index of the search key, if it is contained in the array; otherwise, (-(insertion point) - 1). The insertion point is defined as the point at which the key would be inserted into the array:

čiže ti vráti číslo 0 alebo väčšie ako 0 ak sa hľadaný výraz nachádza v poli. Inak vráti záporné číslo, ktoré ak dáš do absolútnej hodnoty ti označí index na ktorom by sa hľadané slovo nachádzalo ak by v tom poli naozaj bolo.

Stačí pri zadávaní simpsona napísať random reťazec a tvoj program vypíše, že je z rodiny Simpsnov pretože funkcia binarySearch vráti zápornú hodnotu.

Najprv svoj program poriadne otestuj než ho tu pre nováčikov označíš ako super fungujúce riešenie.

Odpovědět
7.10.2019 20:53
/* I am not sure why this works but it fixes the problem */
Avatar
Tano7
Člen
Avatar
Odpovídá na Tano7
Tano7:8.10.2019 1:38

Uvedený kód funguje, viz. screeny, vyzkoušej si ho.

Odpovědět
8.10.2019 1:38
Život by byl mnohem snazší, kdybychom k němu měli zdrojový kód.
Avatar
Odpovídá na Tano7
Matúš Olejník:8.10.2019 9:52

Nemusím ho ani skúšať aby som videl, že je to zle. Otestuj si svoj program poriadne a uvidíš. Máš podmienku s dvomi vetvami a testuješ program len na jeden vstup.

Až si to všimneš, zistíš, že neplechu ti tam robí najmä to "toLowerCase" kvôli čomu tam potom robíš chybnú podmienku len aby sa zdalo, že to funguje.

10. září 23:46 som ti dokonca písal čo treba spraviť ak chceš ignorovať veľkosti písmen.

Odpovědět
8.10.2019 9:52
/* I am not sure why this works but it fixes the problem */
Avatar
Tomáš Weiter:1.11.2019 11:34

Pekna lekce

 
Odpovědět
1.11.2019 11:34
Avatar
Odpovídá na Tano7
Jiří Janalík:2.11.2019 10:04

No stači zadat třeba "bartik" a hned člověk vidí, že to je nějaké zvláštní... Vypíše to totiž, že je to taky Simpson. Vlasně tam člověk může napsat úplně cokoli a vždy mu to vypíše, že je to taky Simpson... Takže nepřijde mi, že by to fungovalo správně ;-) Při testování je třeba vyzkoušet nejrůznější (zejména mezní, krajní) možnosti, tam se rychle pozná, že je něco třeba opravit..

 
Odpovědět
2.11.2019 10:04
Avatar
DagmarZ
Člen
Avatar
DagmarZ:28.11.2019 16:49

Ahoj, neví někdo, jaktože mi stejný program, jako váš, nechce jet na IntelliJ a hlásí mi spoustu chyb? Konkrétně:
Error:(7, 10) java: ']' expected
Error:(8, 5) java: illegal start of type
Error:(8, 25) java: illegal start of type
Error:(8, 30) java: <identifier> expected
Error:(11, 5) java: illegal start of type
Error:(11, 15) java: ';' expected
Error:(11, 22) java: <identifier> expected

Vůbec nechápu, proč to po mně chce v 7. řádku závorku ], když mi tam žádná nechybí... a celý to nechápu. :D

Editováno 28.11.2019 16:51
 
Odpovědět
28.11.2019 16:49
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na DagmarZ
Petr Štechmüller:28.11.2019 18:08

Chybí ti tam metoda main ;-)
Nestuduješ náhodou ZČU? :-P

Odpovědět
28.11.2019 18:08
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
DagmarZ
Člen
Avatar
Odpovídá na Petr Štechmüller
DagmarZ:28.11.2019 20:24

Šmarja... (plácám se do čela). To je tak, když na to pár dní ani nekouknu, a pak zapomínám na takové samozřejmosti.
Studuju. To jsi poznal asi podle toho ppa1, že? :D

Editováno 28.11.2019 20:24
 
Odpovědět
28.11.2019 20:24
Avatar
Karel Sabo
Člen
Avatar
Karel Sabo:22.4.2020 11:06

moc nechápu, proč tam musí být dva cykly "for". Ten druhej můžu vynechat, ne?

for (int i = 0; i < 10; i++) {
    pole[i] = i + 1;
}

for (int i = 0; i < pole.length; i++) {
    System.out.print(pole[i] + " ");
}

Nebo mi něco brání nechat to takhle?

for (int i = 0; i < 10; i++) {
    pole[i] = i + 1;
    System.out.print(pole[i] + " ");
}
Editováno 22.4.2020 11:08
 
Odpovědět
22.4.2020 11:06
Avatar
Rozbita Zaluzie:22.4.2020 20:02

Příjde mi že poslední kód je moc málo popsaný myslím si že by nedělalo problém psát komentáře přímo i do kódu napšíklad d% nebo f% už možná byli v jiných lekcích ale je potřeba to vysvětlit i tady :)

 
Odpovědět
22.4.2020 20:02
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Karel Sabo
Alesh:22.4.2020 22:41

Zřejmě narážíš na tuto pasáž, viz níže. Nevidím jediný důvod, proč by načtení do pole a jeho výpis při výukových činnostech měli patlat dohromady. ;-) Zkrátka první případ ukazuje studentovi, jak pole naplnit, druhý, jak ho vypsat. I z doprovodného textu je to jasně patrné.


Plnit pole takhle ručně by bylo příliš pracné, použijeme cyklus a naplníme si pole čísly od 1 do 10. K naplnění použijeme for cyklus:

int[] pole = new int[10];
pole[0] = 1;
for (int i = 0; i < 10; i++) {
    pole[i] = i + 1;
}

Abychom pole vypsali, můžeme za předchozí kód připsat:

for (int i = 0; i < pole.length; i++) {
    System.out.print(pole[i] + " ");
}
 
Odpovědět
22.4.2020 22:41
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Rozbita Zaluzie
Alesh:22.4.2020 22:50

Máš to vysvětleno ve Lekce 4 - Typový systém podruhé: Datové typy, nepochybně se předpokládá postupné studium, kdyby měl v každé další lekci vše znovu opakovat, nedělal by nic jiného. :-)

Značky jsou:

  • %d pro celá čísla
  • %s pro String
  • %f pro float. U float můžeme definovat délku desetinné části, např: %.2f pro dvě desetinná místa.
 
Odpovědět
22.4.2020 22:50
Avatar
Karel Sabo
Člen
Avatar
Odpovídá na Alesh
Karel Sabo:23.4.2020 6:22

Takže logicky je ten kratší zápis v pořádku, ale tady je to rozepsané pro názornost, chápu a díky. Jdu pokračovat :)

 
Odpovědět
23.4.2020 6:22
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Karel Sabo
Alesh:23.4.2020 10:28

Logicky to dát rovnou takto do sebe moc není, protože většinou to pole nejdřív naplníš, pak během programu s ním nějak pracuješ, jako že do něj něco přidáš, ubereš, upravíš apod. a někde na konci to upravené pole vypíšeš.
Pokud bys potřeboval udělat to, co ty navrhuješ, tak je zbytečné používat pole a může rovnou cyklem vypisovat:

for (int i = 1; i <= 10; i++) {
    System.out.print(i + " ");
}
 
Odpovědět
23.4.2020 10:28
Avatar
Karel Sabo
Člen
Avatar
Odpovídá na Alesh
Karel Sabo:23.4.2020 11:46

Veliká pravda, díky :)

 
Odpovědět
23.4.2020 11:46
Avatar
Rozbita Zaluzie:23.4.2020 13:00

jaký je rozdíl println() a printf() nebo spíše kde se musí rozlišovat.. jestli je teda jiný důvod než že do println() nejdou napsat %d / %f /%s

 
Odpovědět
23.4.2020 13:00
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Rozbita Zaluzie
Alesh:23.4.2020 13:30

Ještě existuje metoda print(). Záleží na situaci, co v dané chvíli použít, většinou půjde použít vše, pokud nebudeš chtít odřádkovat, tak samozřejmě nelze použít println().

  • print - vytiskne to, co je v závorce, buďto jen nějaký řetězec nebo víc spojených plusem
  • println - je totéž co print, jen to na konci odřádkuje
  • printf - umí umožňuje atributy dát za řetězec
//každý řádek je stejná akce, vypíše "ahoj10" a odřádkuje
int i = 10;
System.out.print("ahoj" + i + "\n");    //vypíše ahoj připojí obsah proměnné i (10) a odřádkuje (\n)
System.out.println("ahoj" + i);         //vypíše ahoj připojí obsah proměnné i (10) a odřádkuje sama ta metoda
System.out.printf("ahoj%d\n", i);       //za %d se dosadí obsah proměnné i (10) a vypíše se tedy ahoj10 a odřádkuje (\n)
 
Odpovědět
23.4.2020 13:30
Avatar
Michal Maleňák:11.7.2020 22:19

Mohl bych být tak nesmělý a poprosit o nějaký příklad k metodě copyOfRange().. (jde mi o to jak by to vypadalo v kódu jestli se to dává před nazev pole nebo se deklaruje nova promena s metodou copyOfRange()? Děkuji za odpověď

 
Odpovědět
11.7.2020 22:19
Avatar
Richmont01
Člen
Avatar
Richmont01:9.8.2020 12:59

Mám když zkusím určít 0 u pole, tak mi netbeans řekne tohle: "]" expected. zkusil jsem tam přímo nakopírovat toto a furt to má problém:
int[] pole = new int[10];
pole[0] = 1;

 
Odpovědět
9.8.2020 12:59
Avatar
Richmont01
Člen
Avatar
Odpovídá na Richmont01
Richmont01:9.8.2020 13:06

aha tak nic já jsem vše dal mimo public static void lol.

 
Odpovědět
9.8.2020 13:06
Avatar
Robert Vyskup:28.7.2021 18:44

Ten příklad proměnné délky pole mi nějak nefunguje. A ani mu úplně nerozumím. Po spočítání průměru je to celkem OK, i když to vytiskne "Zadejte %d. číslo: " vedle sebe na řádek. Ale problém pak je s následujícím řádkem
cisla[i] = Integer.parse­Int(sc.nextLi­ne());
Po zadání tohoto řádku už to "Zadejte %d. číslo: " netiskne vůbec.
Co je na tom špatně?

 
Odpovědět
28.7.2021 18:44
Avatar
Odpovídá na Robert Vyskup
Matúš Olejník:28.7.2021 19:13

Ahoj v lekcii https://www.itnetwork.cz/…-a-parsovani je vysvetlené načítanie vstupu od užívateľa. Preto program nič nerobí lebo čaká až zadáš nejaké číslo. Ty píšeš, že sa to ani raz nevypíše hoci minimálne raz by sa to vypísať malo. Buď si zadal počet rovný nule alebo bude chyba niekde inde. Najlepšie ak pošleš ukážku svojho kódu.

Odpovědět
28.7.2021 19:13
/* I am not sure why this works but it fixes the problem */
Avatar
Robert Vyskup:28.7.2021 20:21

Tak už jsem na to přišel. U "Zadejte %d. číslo: " chybělo na konci \n pro odřádkování. Teď už to vypadá bude fungovat.

 
Odpovědět
28.7.2021 20:21
Avatar
Robert Vyskup:28.7.2021 20:49

Jinak tam taky bohatě stačí místo cisla.length dát pocet.

 
Odpovědět
28.7.2021 20:49
Avatar
Robert Vyskup:29.7.2021 15:11

A tak trochu mimo topic. Jaký je rozdíl mezi indexem prvku a jeho hodnotou. Prosím o obsáhlejší vysvětlení i s příklady jak rozlišit index a hodnotu daného prvku. Díky

 
Odpovědět
29.7.2021 15:11
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Robert Vyskup
Alesh:29.7.2021 19:23
pole[0] = 1;

ta nula je index, ta jednička hodnota

 
Odpovědět
29.7.2021 19:23
Avatar
Odpovídá na Alesh
Robert Vyskup:30.7.2021 5:01

Dobře, to bych chápal. Ale co když vezmu takové písmeno 'a' - jeho číselný index je 97, ale jaká je jeho hodnota, pokud se tedy dá vůbec vyjádřit.

 
Odpovědět
30.7.2021 5:01
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Robert Vyskup
Alesh:30.7.2021 10:11

ASCII tabulka je pole znaků, na indexu 97 je hodnota 'a'.

ascii[97] = 'a';
 
Odpovědět
30.7.2021 10:11
Avatar
Robert Vyskup:9.8.2021 15:22

Absolutně nechápu, kde mám problém u té proměnné délky pole, mám to napsané vpodstatě stejně:

Scanner sc = new Scanner(System.in, "Windows-1250");
        System.out.println("Ahoj, spočítám ti průměr známek. Kolik známek zadáš?");
        int pocet = Integer.parseInt(sc.nextLine());
        int[] znamky = new int[pocet]; //převedení počtu známek na pole prvků
        for(int i = 0; i < pocet; i++) { //projedeme celé pole
            System.out.printf("Zadejte %d. číslo: ", i + 1); //vytiskneme jednotlivé indexy pro daný prvek, musíme přičíst jedna, abychom nezačínali od nuly
            znamky[i] = Integer.parseInt(sc.nextLine()); //číslo jednotlivého prvku(známky) hodíme do pole
        }
        int soucet = 0; //součet musí být ustanoven před cyklem, v cyklu ho už ustanovit nejde
        for(int i : znamky) { //vybereme jedntlivé známky z pole
            soucet += i; //a sečteme je
        }
        float prumer = soucet / (float)znamky.length; //uděláme průměr, musí zde být změna z int na float u pole znamky
        System.out.printf("Průměr tvých známek je: %f", prumer);

Zobrazí to první větu, já zadám počet známek a nic. Program běží a nic. Předtím jsem ten file i se souborem přejmenovával, ale toto je už úplně nový file i soubor a pořád to samé. Hodí mi to hlášku Unexpected Exception. Pak se běh programu zastaví a zobrazí se toto hlášení:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
        at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
        at java.base/java.lang.Integer.parseInt(Integer.java:670)
        at java.base/java.lang.Integer.parseInt(Integer.java:778)
        at cz.itnetwork.prumero.prumero.main(prumero.java:18)
Zadejte 1. číslo: [ERROR] Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
    at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:982)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:929)
    at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:457)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:78)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:567)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (default-cli) on project prumero: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
 
Odpovědět
9.8.2021 15:22
Avatar
Robert Vyskup:9.8.2021 19:02

Tak nic omlouvám se vyřešeno tam mi jenom u

System.out.printf("Zadejte %d. číslo: ", i + 1);

chybělo před druhýma uvozovkama \n
Což tu také není v originále, a nováčka jako jsem já to může řádně potrápit. Na druhou stranu si už to celé řešení budu pamatovat až nadosmrti.

 
Odpovědět
9.8.2021 19:02
Avatar
Robert Vyskup:22.8.2021 18:10

Může mi někdo vysvětlit jak přesně funguje binarySearch() spolu s Arrays.sort(). Vezněme si ten příklad Simpsonových. Když to pole neseřadím pomocí Arrays.sort tak když zadám Bart, tak to Barta najde a vypíše: "Jo, to je Simpson!", když však zadám Homer, tak ho to nenajde a vypíše to "Hele, tohle není Simpson!" Pak když pole seřadím tak to najde oba. Co se tam přesně děje.

 
Odpovědět
22.8.2021 18:10
Avatar
Atrament
Supertvůrce
Avatar
Odpovídá na Robert Vyskup
Atrament:22.8.2021 18:52

Je to kvůli tomu jak funguje binary search - více zde

 
Odpovědět
22.8.2021 18:52
Avatar
Odpovídá na Atrament
Robert Vyskup:22.8.2021 19:49

Chápu, že to najde Barta v tom nesetříděném poli, protože je přesně uprostřed. A pak to najde Lisu a Maggie, jelikož to začne hledat v té druhé půlce, když je nenajde přesně uprostřed. Co se změní v případě, kdy to setřídím pomocí Arrays.sort()? Vždyť pak je přece Bart první abecedně a Homer druhý a stejně je to najde. Co se tam změní, že je to po setřídění najde?

 
Odpovědět
22.8.2021 19:49
Avatar
Atrament
Supertvůrce
Avatar
Odpovídá na Robert Vyskup
Atrament:22.8.2021 20:10

Změní se to, že po Arrays.sort() je to pole setřízené takže Homer bude na 'správné' straně když se v rámci binary search podíváš na prostřední prvek a porovnáš ho s Homerem - u nesetřízeného pole, tak jak je v ukázce v lekci koukne na prostředek, najde Barta a ten je v abecedě před Homerem, tak usoudí že Homer musí být někde napravo od něj, zahodí všechno nalevo od Bárta a pokračuje v hledání napravo, kde ale Homer ve skutečnosti není, protože to pole nebylo setřízené. Proto ho nikdy nenajde. Proto je nutné to pole nejprve setřídit, aby to vůbec mohlo fungovat.

 
Odpovědět
22.8.2021 20:10
Avatar
Odpovídá na Robert Vyskup
Jakub Žitný:9.9.2021 13:05

Díky moc! Po hodině hledání problému jsi mě zachránil před pořádným vztekáním :D

 
Odpovědět
9.9.2021 13:05
Avatar
Tomáš Rosprim:18.9.2021 16:56

Nerozumím chybě v syntaxi, která je i zde v uvedeném příkladu známek, konkrétně toto:
System.out.prin­tf("Zadejte %d. číslo: ", i + 1);

Při vpisování známek se mi neobjeví požadovaná hláška, až když vyplním počet n známek(délka pole), vypíše mi to všechny hlášky s číslem n + průměr do jednoho řádku.
Moje řešení je: System.out.prin­tln("Zadejte " + (i+1) + ". číslo: ");

Byl bych rád, kdyby mi někdo objasnil, proč to nefunguje? Používám NetBeans, může to být způobeno tím? Díky!

 
Odpovědět
18.9.2021 16:56
Avatar
Odpovídá na Tomáš Rosprim
Tomáš Rosprim:18.9.2021 17:05

Zajímavé, takže je to způsobeno pouze chybějícím odřádkováním ...
Správná syntaxe je:

System.out.prin­tf("Zadejte %d. číslo: \n", i + 1);

 
Odpovědět
18.9.2021 17:05
Avatar
daniel.pszczolka:17.10.2021 13:24

Ahoj. Tento kód

for (int i=0;i<pocet;i++){
    System.out.printf("Zadejte %d. číslo: ",i+1);
    pole[i]=Integer.parseInt(sc.nextLine());
}

mi funguje takto že se nejdříve čeká až zadám všechny prvky a až na konec do jednoho řádku napíše
Zadejte 1. číslo: Zadejte 2. číslo: Zadejte 3. číslo: Zadejte 4. číslo: Zadejte 5. číslo:
Nevím proč

 
Odpovědět
17.10.2021 13:24
Avatar
Odpovídá na daniel.pszczolka
daniel.pszczolka:17.10.2021 13:26

nepřečetl jsem si předchozí vstup :-)

 
Odpovědět
17.10.2021 13:26
Avatar
Roger Young
Člen
Avatar
Roger Young:20.11.2021 14:57

není vysvětleno pocet += i

a nefunguje to odřádkování při načítání čísel.

 
Odpovědět
20.11.2021 14:57
Avatar
Jaroslav Drobek:26. ledna 9:35

Jak použít metodu size() tak aby vracela totéž co length?

Označení proměnné "i" v obou po sobě jdoucích cyklech for a foreach je vzhledem k odlišnému charakteru proměnné (inde pole/prvek pole) zavádějící.

Pro úlohu se Simpsny právě není třeba pole setřídit, protože index výskytu ve výstupu nepoužijeme..

"(float)cisla­.length" tedy znamená, že se celočíselná hodnota cisla.length před aktuálním použitím zkonvertuje na float?

 
Odpovědět
26. ledna 9:35
Avatar
Atrament
Supertvůrce
Avatar
Atrament:28. ledna 23:29

Pro úlohu se Simpsny právě není třeba pole setřídit, protože index výskytu ve výstupu nepoužijeme..

Jak chceš provádět binarySearch() na nesetřízeném poli?

 
Odpovědět
28. ledna 23:29
Avatar
David Poslt
Člen
Avatar
David Poslt:30. ledna 13:44

Ahoj, trošku mě zarazila velikost pole. Co jsem tak koukal, tak metoda size() pro něj použít nejde a používá se u seznamu tedy list. Není teda chyba v článku? Nebo jakým způsobem se dá použít, popřípadě jaký je rozdíl mezi size() a lenght

 
Odpovědět
30. ledna 13:44
Avatar
Atrament
Supertvůrce
Avatar
Odpovídá na David Poslt
Atrament:30. ledna 14:00

Jo to size() je chyba, zrovna předevčírem jsem poslal do redakce opravu, čeká to na schválení...

 
Odpovědět
30. ledna 14:00
Avatar
Odpovídá na Atrament
Jaroslav Drobek:7. února 9:24

Jo, teď to čtu znovu a už to chápu - to bych ale neočekával, že je metoda binarySearch() tak subtilní: často potřebujeme index prvku v nesetříděném poli. Lze jistě získat cyklem, ale neexistuje na to jiná metoda?

 
Odpovědět
7. února 9:24
Avatar
Martin Král
Člen
Avatar
Martin Král:15. září 8:29
Editováno 15. září 8:30
 
Odpovědět
15. září 8:29
Avatar
Martin Král
Člen
Avatar
Martin Král:15. září 11:27

Ocenil bych lepší vysvětlení kroků, které jsou následně důležité k vyřešení úkolů (například soucet += i; nikde není vysvětleno)

 
Odpovědět
15. září 11:27
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 174 zpráv z 174.