Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. 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í.

Diskuze: vypis pole-java

Aktivity
Avatar
Lukáš Krása:27.11.2015 19:38

ahoj potřeboval bych když mám pole vytvořené z posloupnosti např :[67, 45, 21, 45, 21] tak potřebuji aby mi to vypsalo pole :[67, 45, 21] tzn. pole do prvku ktere se v tom poli již vyskytlo :)
moc rád bych byl za jakoukoli radu :)

 
Odpovědět
27.11.2015 19:38
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Lukáš Krása
Tomáš Brůna:27.11.2015 19:54

chápu správně že máš čísla uložené v poli a ty chceš vypsat?

Nahoru Odpovědět
27.11.2015 19:54
Vi veri universum vivus vici
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Lukáš Krása
tomisoka:27.11.2015 19:55

Řešil bych to nějak takto:

for(i=0;i<pole.size;++i){
        for(j=0;j<i;++j){
                if(pole[i]==pole[j]){
                        //už tu je, ukončení cyklu
                }
        }
        //print
}
 
Nahoru Odpovědět
27.11.2015 19:55
Avatar
Lukáš Krása:27.11.2015 19:57

ano mám pole utvořené posloupností a já chci vypsat prvky pole do té doby než se nejaky z prvku opakuje :)

 
Nahoru Odpovědět
27.11.2015 19:57
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na tomisoka
Tomáš Brůna:27.11.2015 19:58

není ten 2. cyklus zbytečný?

Editováno 27.11.2015 19:59
Nahoru Odpovědět
27.11.2015 19:58
Vi veri universum vivus vici
Avatar
Tomáš Brůna
Tvůrce
Avatar
Nahoru Odpovědět
27.11.2015 19:59
Vi veri universum vivus vici
Avatar
Odpovídá na tomisoka
Lukáš Krása:27.11.2015 20:03

takto mi to právě nefunguje :) mám právě vytvořené pole o hodně prvcích z určitě posloupnosti a a chci jen to pole zmenšit a vypsat prvky pole do kterých se ty prvky neopakují :)

 
Nahoru Odpovědět
27.11.2015 20:03
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Lukáš Krása
tomisoka:27.11.2015 20:07

Jak vypadá tvůj aktuální kód?

 
Nahoru Odpovědět
27.11.2015 20:07
Avatar
Odpovídá na tomisoka
Lukáš Krása:27.11.2015 20:11
public static void main(String[] args) {
                System.out.print("Zadej dvojciferne cislo:");

                int cislo = sc.nextInt();

                 int [] p = new int [50];
                 p[0]=cislo;

                 for(int j = 1; j< p.length;j++){

                int nasobek = cislo*cislo;

                if(nasobek>=100 && nasobek <999){
                        int y = (int) (nasobek % 2);
                        int x = (nasobek - y)/10;
                        int c1 = x+1;

                        cislo=c1;
                }
                else if(nasobek<=9999 && nasobek > 100){
                        int y = (int) (nasobek % 2);
                        int x = (nasobek - y)/100;
                        int c = x+1;

                        cislo = c;
                        }
                p[j]=cislo;



    }
 
Nahoru Odpovědět
27.11.2015 20:11
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Lukáš Krása
tomisoka:27.11.2015 20:16

Tohle to je inicializace toho pole, že?
Spíš bych rád viděl tvůj pokus o implementaci toho zmenšení pole.

 
Nahoru Odpovědět
27.11.2015 20:16
Avatar
Odpovídá na tomisoka
Lukáš Krása:27.11.2015 20:17

Napadlo mě nějak zastavit tu poslounost ale boj´hužel vůbec nevím jak :/

 
Nahoru Odpovědět
27.11.2015 20:17
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Lukáš Krása
Tomáš Brůna:27.11.2015 20:19

zastavit posloupnost?

Nahoru Odpovědět
27.11.2015 20:19
Vi veri universum vivus vici
Avatar
Odpovídá na Tomáš Brůna
Lukáš Krása:27.11.2015 20:29

ano aby se už dále nevypisovali prvky posloupnosti když se objeví stejný prvek :) a to co vyjde dát nějak do pole :) nevím jak na to :/ jinak jsem postupoval stejně jako vy :)

 
Nahoru Odpovědět
27.11.2015 20:29
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Lukáš Krása
Tomáš Brůna:27.11.2015 20:38

asi to bude špatně ale spatlal jsem tohle.

Random hod = new Random();
        int pocetCisel = 50;
        int pole[] = new int[50];


        for (int i = 0; i < pocetCisel; i++)
        {
         int cislo = hod.nextInt(3);
         pole[i] = cislo;
         System.out.print(cislo);
        }
        System.out.println();
        String text = "";

        for (int i = 0; i < pole.length; i++)
        {
         if (text.contains(String.valueOf(pole[i])))
         {

         }
         else
         {
          text+=String.valueOf(pole[i]);
         }

        }

        String vyslednepoleznaku[] = text.split(" ");

        int vysledek[] = new int[vyslednepoleznaku.length];

        for (int i = 0; i < vyslednepoleznaku.length; i++)
        {
           vysledek[i] = Integer.parseInt(vyslednepoleznaku[i]);
        }

        for (int i = 0; i < vysledek.length; i++)
        {
            System.out.println(vysledek[i]);
        }
Nahoru Odpovědět
27.11.2015 20:38
Vi veri universum vivus vici
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Lukáš Krása
Tomáš Brůna:27.11.2015 20:39

zkusil bych:

break;
Nahoru Odpovědět
27.11.2015 20:39
Vi veri universum vivus vici
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Lukáš Krása
tomisoka:27.11.2015 20:40

Tam ti dělá problém breaknutí dvou for-cyklů?
Pokud jo tak to se dá řešit buďto funkcí, nebo takto:

loop:
for(i=0;i<pole.length;++i){
        for(j=0;j<i;++j){
                if(pole[i]==pole[j]){
                        break loop;
                }
        }
}

Nasledně máš v "i" uloženo kolik prvků chceš vypsat/dát do jiného pole...

 
Nahoru Odpovědět
27.11.2015 20:40
Avatar
Lukáš Krása:27.11.2015 20:50

Vážím si vašich rad a Vašeho času nicméne pořád nevím tak bych to zkusil jinak ... nevíte jak bych mohl zastavit generování následující posloupnosti když se objeví prvek který už se vygeneroval? :

public static void main(String[] args) {
                System.out.print("Zadej dvojciferne cislo:");

                int cislo = sc.nextInt();


                for (int j = 0;  j < 100 ; j++) {

                int nasobek = cislo*cislo;



                if(nasobek>=100 && nasobek <999){

                        int y = (int) (nasobek % 2);
                        int x = (nasobek - y)/10;
                        int c = x+1;
                        cislo=c;

                }

                else if(nasobek<=9999 && nasobek > 100){

                        int y = (int) (nasobek % 2);
                        int x = (nasobek - y)/100;
                        int c = x+1;

                 cislo=c;

                        }

                System.out.println(cislo);


    }

děkuji :)

 
Nahoru Odpovědět
27.11.2015 20:50
Avatar
Lukáš Krása:27.11.2015 20:58

zadani :)

  1. Program umocní zadané dvouciferné číslo (startovací hodnotu) na druhou.
  2. Z výsledku použije první dvě cifry (zleva), čímž získá dvouciferné číslo.
  3. K tomuto číslu přičte jedničku a výsledkem je nově vygenerované pseudonáhodné číslo.
  4. Body 1) až 3) se opakují tak dlouho, dokud se nezačnou pseudonáhodná čísla opakovat

    (tj. končí výskytem pseudonáhodného čísla, které již bylo dříve vygenerováno).

Příklad vygenerování pseudonáhodných čísel:
67 * 67 = 4489 -> 44 + 1 = 45
45 * 45 = 2025 -> 20 + 1 = 21
21 * 21 = 441 -> 44 + 1 = 45 -- tato hodnota se již v posloupnosti vyskytla, generování končí
Posloupnost pseudonáhodných čísel začínající startovací hodnotou 67 je tedy 67, 45, 21

 
Nahoru Odpovědět
27.11.2015 20:58
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Lukáš Krása
tomisoka:27.11.2015 20:59

Prakticky to samé:

int []pole = new int[100];
loop:
for(j=0;j<100;++j){
        //generování...

        pole[j]=cislo;

        for(i=0;i<j;++i){
                if(pole[i]==pole[j]){
                        break loop;
                }
        }
}
 
Nahoru Odpovědět
27.11.2015 20:59
Avatar
Vladislav Domin:27.11.2015 21:02

Ja fakt neviem, ci som ti porozumel, ale skus toto

public static void main(String[] args) {
        // TODO code application logic here
        int[] pole = { 1, 3, 4, 5, 1, 1, 3, 4, 5 };
        v:
        for(int i = 0; i < pole.length; i++) {
            for(int j = 0; j < i; j++)
                if(pole[i] == pole[j])
                    continue v;
            System.out.print(pole[i] + " ");
        }
    }
 
Nahoru Odpovědět
27.11.2015 21:02
Avatar
Odpovídá na Vladislav Domin
Vladislav Domin:27.11.2015 21:06

Alebo podla toho zadania, ak chces zastavit ten loop, tak proste pouzi break, v com je problem?

 
Nahoru Odpovědět
27.11.2015 21:06
Avatar
Odpovídá na Vladislav Domin
Lukáš Krása:27.11.2015 21:10

to je spravne :) jak to vypisu v poli? tj. [1, 2, 3]

 
Nahoru Odpovědět
27.11.2015 21:10
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Lukáš Krása
Tomáš Brůna:27.11.2015 21:15

nebo by to šlo, tak že si vygenerovaná čísla nastrkáš do proměnné a pak při každém cyklu kontroluješ zda už v ní to číslo je

Nahoru Odpovědět
27.11.2015 21:15
Vi veri universum vivus vici
Avatar
Odpovídá na Lukáš Krása
Vladislav Domin:27.11.2015 21:20

Neviem, co mas na mysli.. Chces "vyhovujuce" cisla ulozit do pola a to nasledne vypisat?

 
Nahoru Odpovědět
27.11.2015 21:20
Avatar
Odpovídá na Vladislav Domin
Lukáš Krása:27.11.2015 21:21

mělo by to tak byt .)

 
Nahoru Odpovědět
27.11.2015 21:21
Avatar
Odpovídá na Vladislav Domin
Lukáš Krása:27.11.2015 21:41

jak tedy vypíšu ta čísla v poli? [1, 2, 3,]?

 
Nahoru Odpovědět
27.11.2015 21:41
Avatar
Vladislav Domin:27.11.2015 21:46

Nakolko dlzka pola, ktore by si siel vytvorit nie je znama, tak siel by som do ArrayListu
-> http://www.itnetwork.cz/…zani-polozek
Nie som teraz k dispozicii, tak si to nastuduj a urob to sam. Je to tipujem domaca uloha, ta by stratila to caro, ak by sme ti ju urobili my :D

 
Nahoru Odpovědět
27.11.2015 21:46
Avatar
Vladislav Domin:27.11.2015 21:48

Ako pomocku ti mozem povedat len to, ze budes potrebovat cyklus for, ktorym budes pole naplnat. Skus sa s tym pohrat a urcite na to prides sam !

 
Nahoru Odpovědět
27.11.2015 21:48
Avatar
Lukáš Krása:27.11.2015 21:49

díky nějak to zkusím :)

 
Nahoru Odpovědět
27.11.2015 21:49
Avatar
abushrek
Člen
Avatar
abushrek:27.11.2015 22:35
ArrayList<Integer> posloupnost = new ArrayList<Integer>();
        System.out.print("Zadej dvojciferne cislo:");
                int cislo = sc.nextInt();
do{
                int nasobek = cislo*cislo;
                int y = (int) (nasobek % 2);
                int x = (nasobek - y)/10;
                int c = x+1;
                cislo=c;
if (!posloupnost.contains(cislo))
                posloupnost.add(cislo);
else break;
}while(true);
 
Nahoru Odpovědět
27.11.2015 22:35
Avatar
abushrek
Člen
Avatar
Odpovídá na abushrek
abushrek:27.11.2015 22:39

Pro výpis kolekce použiješ

for(int i=0;i<posloupnost.size();i++)
System.out.println("["+posloupnost.get(i)+";]");
 
Nahoru Odpovědět
27.11.2015 22:39
Avatar
abushrek
Člen
Avatar
abushrek:27.11.2015 22:55

Tady je celý kód můžeš to zkusit, psal jsem to jenom tak z hlavy, jelikož nemám žádný kompilátor na javu u sebe momentálně.

import java.util.Scanner;
import java.util.ArrayList;
public class HelloWorld{

     public static void main(String []args){
        Scanner sc = new Scanner(System.in, "Windows-1250");
        ArrayList<Integer> posloupnost = new ArrayList<Integer>();
        System.out.print("Zadej dvojciferne cislo:");
                int cislo = sc.nextInt();
do{
                int nasobek = cislo*cislo;
                int y = (int) (nasobek % 2);
                int x = (nasobek - y)/10;
                cislo = x+1;
if (!posloupnost.contains(cislo))
                posloupnost.add(cislo);
else break;
}while(true);
System.out.print("[");
for(int i=0;i<posloupnost.size();i++)
System.out.print(posloupnost.get(i)+";");
     System.out.print("]");
     }
}
 
Nahoru Odpovědět
27.11.2015 22:55
Avatar
abushrek
Člen
Avatar
abushrek:27.11.2015 23:16

Toto by mělo být to co jsi popisoval můžeš vyzkoušet :)

import java.util.Scanner;
import java.util.ArrayList;
public class HelloWorld{

     public static void main(String []args){
        Scanner sc = new Scanner(System.in, "Windows-1250");
        ArrayList<Integer> posloupnost = new ArrayList<Integer>();
        System.out.print("Zadej dvojciferne cislo:");
                int cislo = sc.nextInt();
do{
                int nasobek = cislo*cislo;
                double length = Math.pow(10,(String.valueOf(nasobek).length()-2));  //zjisti pocet cifer nasobku a odecte dve cifry a tim umocni desitku
                int y = (int) (nasobek % 2);
                double x = (nasobek - y)/length;
                cislo = (int)(x+1);
if (!posloupnost.contains(cislo))
                posloupnost.add(cislo);
else break;
}while(true);
System.out.print("[");
for(int i=0;i<posloupnost.size();i++)
System.out.print(posloupnost.get(i)+";");
     System.out.print("]\n Nasledovalo cislo, ktere je jiz obsazeno: "+cislo);
     }
}
 
Nahoru Odpovědět
27.11.2015 23:16
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Lukáš Krása
Atrament:28.11.2015 3:13

Moje verze, vynechal jsem test, zda uživatel nezadává nějaký nesmysl místo dvojciferného čísla.

List<Integer> numbers = new ArrayList<>();
Scanner in = new Scanner(System.in);
int number;

System.out.print("Zadej dvouciferné číslo: ");
number = in.nextInt();
System.out.println("Pridavam: " + number);
numbers.add(number); //pridame uzivatelem zadane cislo

do {

    number *= number; //na druhou
    number = Integer.parseInt(Integer.toString(number).substring(0, 2)); //prvni dve cifry
    number += 1; //plus 1

    if (numbers.contains(number)) { //pokud uz cislo je v kolekci tak konec
        System.out.println("Nalezeno jiz pridane cislo - " + number + ", koncim.");
        break;
    } else { //pokud neni tak ho pridame
        System.out.println("Pridavam: " + number);
        numbers.add(number);
    }

} while (true);
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.11.2015 3:13
Avatar
Lukáš Krása:28.11.2015 10:49

Děkuji Vám :) problém vyřešen :) bohužel je to jen část mé práce :D

 
Nahoru Odpovědět
28.11.2015 10:49
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 35 zpráv z 35.