Tisk sudých a lichých čísel z pole – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Tisk sudých a lichých čísel z pole – Java – Fórum – Programujte.comTisk sudých a lichých čísel z pole – Java – Fórum – Programujte.com

 

Anonym
~ Anonymní uživatel
454 příspěvků
7. 6. 2015   #1
-
0
-

Ahojte, potřebovala bych poradit, jak mám z pole o n prvcích zadaných pomocí klávesnice, pole je následně vyplněno náhodnými čísly a já z nich potřebuju vytvořit nové pole zvlášť sudých a zvlášť lichých čísel a pak obě pole vytisknout. Asi pomocí nějakého třídícího algoritmu? Byla bych moc ráda za odpovědi, snad jsem to napsala srozumitelně.

Nahlásit jako SPAM
IP: 85.132.142.–
reciproke
~ Anonymní uživatel
98 příspěvků
7. 6. 2015   #2
-
0
-

#1 Anonym
Otázkou je co máš a s čím potřebuješ poradit.

Jedniný dotaz vidím na nějaký "třídící algoritmus". Tedy nevíš jak rozpoznat sudé a liché číslo? Zkus se tedy zamyslet jaký je zbytek, sudého a lichého čísla, po celočíselném dělení 2.

Nahlásit jako SPAM
IP: 82.208.4.–
JirkaEr0
Newbie
7. 6. 2015   #3
-
0
-

#1 Anonym
Ahoj,

vytvoříš si tedy dvě nová pole opět o n prvcích (v nejhorším případě budou všechny čísla sudá / lichá).

Pak pomocí for projdeš původní pole a pomocí if a zbytku po celošíselném dělení (n % 2) rozhodneš, zda je číslo sude / lichá a přiřadíš ho do příslušného nového pole.

Nápověda: Pokud je zbytek po celočíselném dělení dvojkou rovno nule, jedná se ĺogicky o číslo sudé.

Nahlásit jako SPAM
IP: 78.157.131.–
Anonym
~ Anonymní uživatel
454 příspěvků
7. 6. 2015   #4
-
0
-

Dělitelnost už jsem zmákla, teda aspoň zatím funguje..

Nevím, jak vytvořit nová pole s těmi sudými a lichými čísly, resp. jak do nových polí ty prvky zvlášť přiřadit

Nahlásit jako SPAM
IP: 85.132.142.–
reciproke
~ Anonymní uživatel
98 příspěvků
7. 6. 2015   #5
-
0
-

Nadeklaruješ si dvě prázdná pole - pro zjednodušení o velikoti původnícho smíšeného. Ke každému si také uděláš index na další volnou pozici.

Dále už jen původní pole projedeš cyklem a dle dělitelnosti vkládáš čísla do patřičného pole a index inkrementuješ.

Pokud bude nějaký problém, už by byla vhodná dílčí inplmentace.

Nahlásit jako SPAM
IP: 82.208.4.–
Anonym
~ Anonymní uživatel
454 příspěvků
7. 6. 2015   #6
-
0
-

   

Připojen obrázek.

Myslim, že takto to bude asi nejvhodnější rovnou ukázat, co mám 

No a teď nevím, jak dál, jak ta nová pole deklarovat-jako int asi ne, když potřebuju, aby obsahovala víc čísel, ne?

Nahlásit jako SPAM
IP: 85.132.142.–
JirkaEr0
Newbie
7. 6. 2015   #7
-
0
-

#6 Anonym
Vidím, že pracuješ jen s kladnými čísli. Tudíž můžeš použít pro nová pole int a nastavíš počáteční hodnoty na -1.

k přiřazení do pole ti pak slouží ty indexi, který sis vytvořila sude, liche.

Nahlásit jako SPAM
IP: 78.157.131.–
reciproke
~ Anonymní uživatel
98 příspěvků
7. 6. 2015   #8
-
0
-

Pole budou typu int, vždyť do nich nic jiného nevkládáš.

V podmínce kde testuješ sudé a liché,  tak před zvýšením indexu vezmeš číslo z původního a vložíš ho na index daného pole sudých nebo lichých čísel.

Jinak snaž se dodržovat odsazení tělo for by mělo být také odsazno, kod je nečitelný, stejně tak by bylo fajn jednotné uzávorkování.

#7 JirkaEr
Počáteční hodnoty -1 netuším k čemu by byly

Nahlásit jako SPAM
IP: 82.208.4.–
Anonym
~ Anonymní uživatel
454 příspěvků
7. 6. 2015   #9
-
0
-

#8 reciproke

Asi budu opět za vola, ale nemám tušení, co udělat "vezmeš číslo z původního a vložíš ho na index daného pole sudých nebo lichých čísel", resp. jak to přepsat do kódu, vím, že je to troufalé, protože už tak jsi mi poradil/a víc dost, ale nemohl/a bys mi to prosím napsat,?

Definovala jsem pole 

int []S=new int[n]; pro sudá a 

int []L=new int[n]; pro lichá

Pak tam hodit znovu cyklus s podmínkou nebo to vepsat do předchozího?

for(int i=0; i<a.length; i++){
        if(a[i] % 2 == 0){
            int[]S=S+a[i]; //s tímto si nevím rady, jak to napsat
        } else {

            //a tohle bych snad nějak dala podle if

Chtěla bych se zlepšit, takže radu s čitelností kódu se pokusím vzít si k srdci, děkuju a prosím jak mám chápat "jednotné uzávorkování"? 

Nahlásit jako SPAM
IP: 85.132.142.–
brucak0
Newbie
7. 6. 2015   #10
-
0
-

 musis si pohlidat, ze pole L a S budou mit rozdilnou velikost nez pole a. Soucet velikosti poli S a L bude a.length();

int suda=0;
int licha =0;
for(int i=0; i<a.length; i++){
        if(a[i] % 2 == 0){
           S[suda] = a[i];
	   suda++; 
        } else {
	  L[licha] = a[i];
	  licha++;           

}
Nahlásit jako SPAM
IP: 37.188.230.–
reciproke
~ Anonymní uživatel
98 příspěvků
7. 6. 2015   #11
-
0
-

#9 Anonym
Je to ta jak píše brucak vše přímo v jednom cyklu.

#10 brucak
Pro zjednodušení jsme dali oběma velikost původního.

Nahlásit jako SPAM
IP: 82.208.4.–
Anonym
~ Anonymní uživatel
454 příspěvků
7. 6. 2015   #12
-
0
-

   

Připojen obrázek.

Tak jsem to napsala, ale zřejmě jsem zas udělala něco blbě, zabývám se tím od dvanácti, tak už mi z toho asi hrabe nebo už nevim, protože místo aby mi to vypsalo všechna sudá čísla, tak to vyhodí nulu. 

Ještě jsem se to pokusila udělat zvlášť ve dvou cyklech

Připojen obrázek.

ale tam mám na výstupu v

"Pole sudych cisel
Pole lichych cisel"

zase místo vypsaných prvků nebo nul poslední prvek sudý a poslední prvek lichý.

Pokusila jsem se pošibovat se závorkama, aby jednou System.out.println byl součástí cyklu, jindy zas ne, už fakt nevím, co dál zkusit. Co teď? 

Výstupem má být něco jako tohle:

zadej pocet prvku pole: 10

15

11

3

9

24

26

22

10

6

7

Počet sudých čísel v poli je: 5

Počet lichých čísel v poli je: 5

 Pole sudých čísel:

24

26

22

10

6

 Pole lichých čísel:

15

11

3

9

7

BUILD SUCCESSFUL (total time: 3 seconds)

Nahlásit jako SPAM
IP: 85.132.142.–
JoDiK
~ Anonymní uživatel
987 příspěvků
7. 6. 2015   #13
-
0
-

#12 Anonym
Prosímtě, zdrojové kódy se sem vkládají jako texty, přes ikonu <?

Totiž když by se někdo rozhodl ti s tím pomoct, asi těžko bude ten tvůj kód opisovat z obrázku aby si to zkusil přeložit a spustit. Ale i od pohledu se mi nezdá, že by Java uměla to co žádný jiný jazyk, totiž vypsat celé pole jednoduchým příkazem pro výstup.

Tak to zkus jako všichni ostatní, hezky po jednom (zdroj informací...):

public static void print(int[] array) {
  for (int i = 0; i < array.length; i++) {
  System.out.println(array[i]);         
  }
}
Nahlásit jako SPAM
IP: 88.103.228.–
JoDiK
~ Anonymní uživatel
987 příspěvků
7. 6. 2015   #14
-
0
-

#13 JoDiK
Na druhý pohled vidím, že pokaždé uložíš do odpovídajícího pole na pozici suda/licha zkoumané číslo a pak přičteš počet sudých/lichých.

Tzn. že na konci budeš mít počty o jedna větší než ve skutečnosti a v tom tvém výpisu vypisuješ právě jen to neexistující sudé/liché číslo. Vypisuj tedy postupně všechny a nějak lépe ošetři ten jejich počet...

Nahlásit jako SPAM
IP: 88.103.228.–
ingiraxo+15
Grafoman
7. 6. 2015   #15
-
0
-

A co takhle použít list.. než vytvářet 2 stejně velký pole, který se ani nezaplněj 

import java.util.*;

public class Main
{
    private static class EvenOddNumber
    {
        private final List<Integer> evens = new ArrayList<>();
        private final List<Integer> odds = new ArrayList<>();

        private void add(int n) {
            if (n % 2 == 0) {
                evens.add(n);
            } else {
                odds.add(n);
            }
        }

        private void print() {
            System.out.println("Počet sudych: " + evens.size());
            System.out.println(evens);
            System.out.println("Počet lichých: " + odds.size());
            System.out.println(odds);
        }
    }

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        final Scanner sc = new Scanner(System.in);

        System.out.print("Počet čísel: ");
        final int n = sc.nextInt();

        final EvenOddNumber numbers = new EvenOddNumber();
        for (int i = 0; i < n; ++i) {
            numbers.add(sc.nextInt());
        }
        numbers.print();
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý