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ě.
Fórum › Java
Tisk sudých a lichých čísel z pole
#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é.
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.
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?
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
#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í"?
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++;
}
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
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)
#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]);
}
}
#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...
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();
}
}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Prumer lichych cisel v intervalu — založil Adam
Generování sudých čísel — založil dědek
Programování - vypsání sudých čísel — založil MišelWu
Sečtení sudých čísel ve sloupcích matice — založil Rodney
Zapsání generovaného čísla do pole a zapisování generovaných čísel d… — založil juraj111
Moderátoři diskuze