NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze – Lekce 12 - Pole v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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
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 10 zpráv z 222.