Diskuze: vypis pole-java
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 35 zpráv z 35.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
chápu správně že máš čísla uložené v poli a ty chceš vypsat?
Ř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
}
ano mám pole utvořené posloupností a já chci vypsat prvky pole do té doby než se nejaky z prvku opakuje
není ten 2. cyklus zbytečný?
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í
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;
}
Tohle to je inicializace toho pole, že?
Spíš bych rád viděl tvůj pokus o implementaci toho zmenšení pole.
Napadlo mě nějak zastavit tu poslounost ale boj´hužel vůbec nevím jak :/
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
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]);
}
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...
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
zadani
(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
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;
}
}
}
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] + " ");
}
}
Alebo podla toho zadania, ak chces zastavit ten loop, tak proste pouzi break, v com je problem?
to je spravne jak to vypisu v poli? tj. [1, 2, 3]
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
Neviem, co mas na mysli.. Chces "vyhovujuce" cisla ulozit do pola a to nasledne vypisat?
jak tedy vypíšu ta čísla v poli? [1, 2, 3,]?
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
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 !
díky nějak to zkusím
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);
Pro výpis kolekce použiješ
for(int i=0;i<posloupnost.size();i++)
System.out.println("["+posloupnost.get(i)+";]");
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("]");
}
}
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);
}
}
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);
Děkuji Vám problém vyřešen bohužel je to jen část mé práce
Zobrazeno 35 zpráv z 35.