Diskuze: Intervaly postup
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Kafac:5.11.2015 20:02
Napsat nějaký podle vás dobrý postup. Jako třeba udělej switch, kde pak budou i podmínky nebo tak nebo abych to udělal nějak jinak ještě. Prostě myslím nějaký dobrý algoritmus na to, hlavně aby fungoval.
Hele switch bych tam nedaval! Příde mi to zbytečný Ale jko určitě ho tam můžeš dát Udělal bych to nějak tkhle za 2 proměnný bych si dosadil jednu hranici intervalu a druhou potom bych tam přes vstup zadal jestli to chci mít otevřený zleva nebo zprava a tk druhej uděláš stejně Zadáš číslo který chceš najít uděláš si podmínky jestli má bejt interval otevřenej nebo zavřenej a jestli je v něm to číslo když jo tak ho vypíše jinak ne sjednocení a průnik těch čísel bych udělal že bych si za 2 pole dosadil ty čísla pomocí for cyklu a pak nějakou metoudou bych je vypsal nebo si napiš přímo nějakou svojí snad sem ti aspon nadhodil nakou myslenku Kdyby si potřeboval pomoc napiš rad ti stim kodem pomužu
Ahoj, měl jsem již program z části hotový, ale pak jsem si něco uvědomil a musel jsem to předělat, jsem zase na začátku a řeším takový menší problém, čísla mi to vypíše, vždycky obráceně a u toho druhého case mi to dokonce nevypíše nic, napsal by mi sem někdo prosím, jak to upravit, aby obojí fungovalo,tak jak má ?
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int levyI;
int levyI2;
int pravyI;
int pravyI2;
System.out.println("Vítejte v programu na výpočet intervalu");
System.out.println("Vyberte se, jak chcete, aby levý interval vypadal");
System.out.println("1- otevřený interval");
System.out.println("2- zleva otevřený a zprava uzavřený interval");
System.out.println("3- uzavřený interval");
System.out.println("4- zprava uzavřený a zleva otevřený interval");
int volba=sc.nextInt();
switch(volba)
{
case 1:
System.out.println("Zadejte první číslo levého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo levého intervalu:");
levyI2=sc.nextInt();
if(levyI > levyI2)
{
System.out.print("Levý interval: "+ "( ");
for (int i=levyI-1; i>levyI2; i--)
{
System.out.print(i+" ");
}
System.out.println(") ");
}else{
System.out.print("Levý interval: "+"( ");
for (int i=levyI+1;i<levyI2;i++)
{
System.out.print(i+" ");
}
System.out.println(") ");
}
break;
case 2:
System.out.println("Zadejte první číslo levého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo levého intervalu:");
levyI2=sc.nextInt();
if(levyI > levyI2)
{
System.out.print("Levý interval: "+"( ");
for (int i=levyI-1; i==levyI2; i--)
{
System.out.print(i + " ");
}
System.out.println("> ");
}
break;
}
}
Kafac:8.11.2015 10:11
Chci tam pak ještě zkusit udělat 2 switch na pravý interval + vztah mezi nimi a aby si uživatel zadal číslo a vypsalo to, jestli tam to číslo patří.
Problém 1:
for (int i=levyI+1;i<levyI2;i++)
V případě, že je číslo 1 větší něž číšlo 2, tak ty začneš u čísla 1 a odčítáš od něj postiupně a výsledky vypisuješ, tzn. ti to jasně vypíše obráceně. Musíš začít u čísla 2 a postupně přičítat až k číslu 1.
Problém 2:
for (int i=levyI-1; i==levyI2; i--)
Tenhle řádek bych přeložil jako:
Začni u čísla i, které bude rovno levyI -1. DOKUD BUDE i ROVNO levyI2, TAK OPAKUJ CYKLUS, a pokaždé odečti od i 1.
Tzn. Cyklus ani nezačne, protože ani na začátku nebude i rovno levyI
Problém X: celý tvůj "princip" vypsání obsahu intervalu do konzole je
chybný, protože vlastně vypisuješ jen čísla celá.
Otevřený interval je interval, kde přesně nemůžeme určit hranici, např.
(3;9> normálně začíná na 3,000000000...1, u tebe začíná přesně na
4. Nehledě na to, že interval má nekonečno deserinných členů
pocitac770:8.11.2015 10:34
Edit: omylem odesláno 2x a bez "odpovídání".
Kafac:8.11.2015 12:06
Díky za pomoc . Ja vím, že interval má hodně desetinných míst a že třeba nemá začínat přesně od tý 4, ale nevím jak bych to udělal, jestli bych to měl dělat třeba v něčem jiným než v int a počítat to třeba ve float? I když právě nevím, jestli by to pomohlo.
Kafac:8.11.2015 14:15
No má to být práce do školy a kdybych tam vypisoval všechna ta desetinná čísla,tak by byl výstup asi hodně dlouhý
Kafac:8.11.2015 14:17
Upravil jsem to do této podoby zatím
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int levyI;
int levyI2;
int pravyI;
int pravyI2;
System.out.println("Vítejte v programu na výpočet intervalu");
System.out.println("Vyberte se, jak chcete, aby levý interval vypadal");
System.out.println("1- otevřený interval");
System.out.println("2- zleva otevřený a zprava uzavřený interval");
System.out.println("3- uzavřený interval");
System.out.println("4- zprava uzavřený a zleva otevřený interval");
int volba=sc.nextInt();
switch(volba)
{
case 1:
System.out.println("Zadejte první číslo levého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo levého intervalu:");
levyI2=sc.nextInt();
if(levyI > levyI2)
{
System.out.print("Levý interval: "+ "( ");
for (int i=levyI-1; i>levyI2; i--)
{
System.out.print(i+" ");
}
System.out.println(") ");
}else{
System.out.print("Levý interval: "+"( ");
for (int i=levyI+1;i<levyI2;i++)
{
System.out.print(i+" ");
}
System.out.println(") ");
}
break;
case 2:
System.out.println("Zadejte první číslo levého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo levého intervalu:");
levyI2=sc.nextInt();
if(levyI > levyI2)
{
System.out.print("Levý interval: "+"( ");
for (int i=levyI-1; i>=levyI2; i--)
{
System.out.print(i + " ");
}
System.out.println("> ");
}
else
{
System.out.print("Levý interval: "+ "( ");
for(int i=levyI+1;i<=levyI2; i++)
{
System.out.print(i+" ");
}
System.out.println("> ");
}
break;
}
}
pocitac770:8.11.2015 17:04
Zatím jsi stále (co se koukám) nedořešil to vypisování pozpátku (jestli se nemýlým ). Kód u všech možností bude vlastně stejný, jen s upravenými operátory, takže spíš než do ručního opisování bych energii vložil do opravy chyb a následného fungování
Kafac:8.11.2015 19:38
No, už to funguje aspoň trochu podle mého očekávání, teď jsem na tom takhle :
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int levyI;
int levyI2;
int pravyI;
int pravyI2;
System.out.println("Vítejte v programu na výpočet intervalu");
System.out.println("Vyberte se, jak chcete, aby levý interval vypadal");
System.out.println("1- otevřený interval");
System.out.println("2- zleva otevřený a zprava uzavřený interval");
System.out.println("3- uzavřený interval");
System.out.println("4- zleva uzavřený a zprava otevřený interval");
int volba=sc.nextInt();
switch(volba)
{
case 1:
System.out.println("Zadejte první číslo levého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo levého intervalu:");
levyI2=sc.nextInt();
if(levyI > levyI2)
{
System.out.print("Levý interval: "+ "( ");
for (int i=levyI-1; i>levyI2; i--)
{
System.out.print(i+" ");
}
System.out.println(") ");
}else{
System.out.print("Levý interval: "+"( ");
for (int i=levyI+1;i<levyI2;i++)
{
System.out.print(i+" ");
}
System.out.println(") ");
}
break;
case 2:
System.out.println("Zadejte první číslo levého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo levého intervalu:");
levyI2=sc.nextInt();
if(levyI > levyI2)
{
System.out.print("Levý interval: "+"( ");
for (int i=levyI-1; i>=levyI2; i--)
{
System.out.print(i + " ");
}
System.out.println("> ");
}
else
{
System.out.print("Levý interval: "+ "( ");
for(int i=levyI+1;i<=levyI2; i++)
{
System.out.print(i+" ");
}
System.out.println("> ");
}
break;
case 3:
System.out.println("Zadejte první číslo levého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo levého intervalu:");
levyI2=sc.nextInt();
if(levyI >levyI2)
{
System.out.print("Levý interval: "+"< ");
for (int i=levyI; i>=levyI2; i--)
{
System.out.print(i+" ");
}
System.out.println("> ");
}
else{
System.out.print("Levý interval: "+"< ");
for (int i=levyI;i<=levyI2;i++)
{
System.out.print(i+" ");
}
System.out.println("> ");
}
break;
case 4:
System.out.println("Zadejte první číslo levého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo levého intervalu:");
levyI2=sc.nextInt();
if(levyI>levyI2)
{
System.out.print("Levý interval: "+"< ");
for(int i=levyI; i>levyI2; i--)
{
System.out.print(i+" ");
}
System.out.println(") ");
}
else{
System.out.print("Levý interval: "+"< ");
for (int i=levyI; i<levyI2; i++)
{
System.out.print(i+" ");
}
System.out.println(") ");
}
break;
}
System.out.println("Vítejte v programu na výpočet intervalu");
System.out.println("Vyberte se, jak chcete, aby pravý interval vypadal");
System.out.println("1- otevřený interval");
System.out.println("2- zleva otevřený a zprava uzavřený interval");
System.out.println("3- uzavřený interval");
System.out.println("4- zleva uzavřený a zprava otevřený interval");
int volbaP=sc.nextInt();
switch(volbaP)
{
case 1:
System.out.println("Zadejte první číslo pravého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo pravého intervalu:");
levyI2=sc.nextInt();
if(levyI > levyI2)
{
System.out.print("Pravý interval: "+ "( ");
for (int i=levyI-1; i>levyI2; i--)
{
System.out.print(i+" ");
}
System.out.println(") ");
}else{
System.out.print("Pravý interval: "+"( ");
for (int i=levyI+1;i<levyI2;i++)
{
System.out.print(i+" ");
}
System.out.println(") ");
}
break;
case 2:
System.out.println("Zadejte první číslo pravého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo pravého intervalu:");
levyI2=sc.nextInt();
if(levyI > levyI2)
{
System.out.print("Pravý interval: "+"( ");
for (int i=levyI-1; i>=levyI2; i--)
{
System.out.print(i + " ");
}
System.out.println("> ");
}
else
{
System.out.print("Pravý interval: "+ "( ");
for(int i=levyI+1;i<=levyI2; i++)
{
System.out.print(i+" ");
}
System.out.println("> ");
}
break;
case 3:
System.out.println("Zadejte první číslo pravého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo pravého intervalu:");
levyI2=sc.nextInt();
if(levyI >levyI2)
{
System.out.print("Pravý interval: "+"< ");
for (int i=levyI; i>=levyI2; i--)
{
System.out.print(i+" ");
}
System.out.println("> ");
}
else{
System.out.print("Pravý interval: "+"< ");
for (int i=levyI;i<=levyI2;i++)
{
System.out.print(i+" ");
}
System.out.println("> ");
}
break;
case 4:
System.out.println("Zadejte první číslo pravého intervalu:");
levyI=sc.nextInt();
System.out.println("Zadejte druhé číslo pravého intervalu:");
levyI2=sc.nextInt();
if(levyI>levyI2)
{
System.out.print("Pravý interval: "+"< ");
for(int i=levyI; i>levyI2; i--)
{
System.out.print(i+" ");
}
System.out.println(") ");
}
else{
System.out.print("Pravý interval: "+"< ");
for (int i=levyI; i<levyI2; i++)
{
System.out.print(i+" ");
}
System.out.println(") ");
}
break;
}
}
teď potřebuju udělat ještě switch na vztahy mezi nima,kde si uživatel tuším vybere ze 2 možností (sloučení a to druhý teď nevím ) a pak ještě zadá číslo a program mu vypíše,jestli tam to číslo patří nebo ne. Akorát bych ti (vám) byl vděčný, kdyby jste mi poradili,jak tu proměnnou i z for cyklu, někam uložit nebo aby se aspoň dala používat i jinde,než v tom switchi,jelikož jí budu muset používat i v tom dalším switchi a pak v těch podmínkách,kde bude jestli tam to číslo patří nebo ne (nebo si to aspoň myslím).
i je proměnná používaná jako "projížděč" toho cyklu, neustále se mění, pak nechápu, co přesně a proč to chceš.
Kafac:8.11.2015 20:50
No potřebuju někam všechna ta čísla uložit,aby až uživatel zadá nějaký číslo,abych mohl pomocí podmínky zjistit jestli tam to číslo je nebo ne.
Kafac:8.11.2015 20:52
Levý interval (1 2 3 4 5 6 7)
Pravý interval <16,17,18 )
a ted si vybere uživatel vztah mezi těma intervalama a pak zadá to číslo a
program zjistí jestli to číslo by bylo v tom intervalu nebo ne
pocitac770:8.11.2015 21:04
Dobře, a co tohle (zároveň by to zjednodušilo kód):
int[] pole;
.....
switch.......
case 1:
pole = [nějakej výpočet na počet čísel]
for(int i......){
....
doplňování prvků do pole je jedno v jakým pořadí
....
}
ostatní for cykly
ostatní casy
Arrays.sort(pole)
for(int i : pole){
postupné vypisování prvků
}
a ty čísla máš mimo switch, hodně zábavy při kódění
Kafac:8.11.2015 21:11
díky,můžu to zkusit,ale mám to mít poslaný do půlnoci a zachvíli budu muset jít pryč už :/,ale zkusím to no
Zobrazeno 21 zpráv z 21.