Počet prvků poli – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Počet prvků poli – Java – Fórum – Programujte.comPočet prvků poli – Java – Fórum – Programujte.com

 

suchla120
Duch
7. 11. 2012   #1
-
0
-

Zdravím, mám tento program

import java.util.*;

public class program1{

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in); // zadani pole
		System.out.println("Zadej jednotlive prvky pole: ");
		int pole[] = new int[10];

		for (int i = 0; i < pole.length; i++) {
			System.out.print("p[" + i + "]: ");
			pole[i] = sc.nextInt();
		}
		sc.close();
		System.out.println("---Vysledky---");
		System.out.println(Arrays.toString(pole));

		bublinkoveRazeni(pole);
		int pocet = 1;
		for (int i = 0; i < pole.length - 1; i++) {

			if (pole[i] == pole[i + 1]) {
				pocet = 1;
				while (i <= pole.length - 2 && pole[i] == pole[i + 1]) {

					pocet += 1;

					i++;
				}

				if (pocet != 1) { 

					int cislo = pole[i];
					System.out.println("Max. pocet je " + pocet + " x " + cislo);

				}
			}
		}
		if (pocet == 1) {
			int prvniCislo = pole[0];
			System.out.println("Max. pocet je 1 x " + prvniCislo);

		}
	}

	static void bublinkoveRazeni(int[] pole) {

		for (int i = 0; i < pole.length - 1; i++) { // serazeni pole

			for (int j = 0; j < pole.length - i - 1; j++) {

				if (pole[j] > pole[j + 1]) {

					int pom = pole[j];
					pole[j] = pole[j + 1];
					pole[j + 1] = pom;
				}

			}

		}
		System.out.println(Arrays.toString(pole));

	}
}


uzivatel zada 10 cisel (mohou se opakovat) program vytiskne zadanou radu cisel, pak ji seradi od nejmensiho po nejvetsi a pak ma najit cislo, ktere se tam nejvice opakuje... takze mam např. [0,1,3,3,5,5,5,7,8,9]

a potrebuju aby mi program vypsal "Max. pocet je 3 x 5", mě ovšem vypíše 

"

Max. pocet je 2 x 3

Max. pocet je 3 x 5

"

potřebuju aby mi to vypsalo jenom to cislo, ktere je tam nejvicekrat. Díky za radu

Nahlásit jako SPAM
IP: 147.228.209.–
sleepy0
Stálý člen
7. 11. 2012   #2
-
0
-

Ak to mas zoradene tak by som isiel nasledovane:

Mam cisla {x1,x1,...,x1,x2,x2...,x2,.......,xn,xn,.....xn}. Tak si 1 cislo zoberem x1 a utekam poli a ak narazim na x1 pripocitam. Kedze mas pole zoradene tak len pocitas od 1. po posledne z x1, ulozis si pocet. Teraz si zober x2 a znova spocitaj ako x1. Teraz mas #x1 #x2 (pocet prvkov x1 a x2) tak tam kde si mal ulozene #x1 teraz ulozis max(#x1,#x2) (jednoduchu vacsiu hodnotu) a uz pocitas x3, x4, x5 a tak dalej.

Dalo by sa pouzit aj vyhldavanie prvku, co by mohlo byt menej narocne a potom by si spocital #xj-teho prvku ako rozdie indexu posledneho prvku a zaciatocneho prvku.

V tej jednoduchsej forme to vidim asi takto:

public String modus(double[] a){ //davas sem len zoradene pole
	int max=1, count;
	double last;
	double maxVal = a[0];
	last = a[0];
	for(int i=1; i<a.length; i++){
		if(a[i]==last){
			count++;
		}
		else{
			// iba ak je max pocet mensi ako pocet tychto prvkov
			if( max < count ){ 
				max = count;
				maxVal = last;
			}
			last=a[i];
			count=1;
		}
	}
	return Integer.toString(max)+"x"+Double.toString(maxVal);
}
Nahlásit jako SPAM
IP: 158.195.195.–
sakal910
Stálý člen
8. 11. 2012   #3
-
+1
-
Zajímavé

#2 sleepy
V podstatě je tvůj příklad dobře ale musím tě upozornit na pár chyb... Takže zaprvé, nikde nemáš inicializovanou proměnnou count, tudíž k ní nemůžeš nic přičítat... takže v deklaraci proměnné musíš mít count = 0; Dále pole VŽDY začíná od 0-tého prvku a né od 1. takže pokud bude například nejvíce 1-ček tak ti to dá špatný výsledek o jednu menší! a pak už jen to proč máš double když on potřebuje int, ale to není chyba :)

Nahlásit jako SPAM
IP: 46.47.141.–
sakal910
Stálý člen
8. 11. 2012   #4
-
0
-

A ještě by se mělo ošetřit, když bude třeba stejný počet dvou čísel, tak to vrátí pouze to druhé číslo... 

Nahlásit jako SPAM
IP: 46.47.141.–
sleepy0
Stálý člen
9. 11. 2012   #5
-
0
-

#3 sakal91
Dakujem za upozornenie, malo by to tak byt. Avsak myslene to bolo tak, ze ak tam dam aspon nejake prvky tak pociatocne prvky nastavym podla 1 a teda aj count=1. Lebo som ho v podstate uz zapocital. To bolo len na ukor toho ze som nechcel vymyslat z nejakimi inimi pociatocnimi hodnotami ze maxVal=-inf (najmensi int.) a pociatocny count=0. Ale mas prvadu lebo moj priklad by potreboval este osetrenie pre polia s nulovou dlzkou. 

Ano, ale to som napisal do komentov, ze ja som to riesil iba pre pocty a nie pre ich hodnotu. Ono to vyzaduje napisanie pomerne nenarocnej podmienky. napr.:
 

if (max < count || ((max == count)&&(MaxVal < last) )){
	//...
}
// alebo netrba vymyslat kedze je postupnost prvkou neklesajuca
// staci iba:
if(max<=count){
	//...
}
Nahlásit jako SPAM
IP: 158.195.195.–
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, 24 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ý