Diskuze: Vypisanie hodnot ako textu

Java Java Vypisanie hodnot ako textu

Aktivity (1)
Avatar
NunuKrysa
Člen
Avatar
NunuKrysa:18.10.2016 21:51

Ahojte,
mozte mi niekto poradit ako by som mohla docielit nasledovne?:

Mam vypocitane hodnoty typu int z mnoziny xy. Hodnot je vzdy rozne vela.
Potrebujem ich vypisat v riadku oddelene carkami ako text.
Vypise mi ich stale pod seba a bez ciarky :)
Nejake navrhy ako to uskutocnit ?

 
Odpovědět 18.10.2016 21:51
Avatar
ostrozan
Redaktor
Avatar
 
Nahoru Odpovědět 18.10.2016 22:36
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:18.10.2016 22:42

ideální by bylo postnout kód
Vypisuješ standardním výstupem?

Nahoru Odpovědět 18.10.2016 22:42
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
NunuKrysa
Člen
Avatar
NunuKrysa:18.10.2016 22:46

Zadanie hovorí :
void vypisPrvocislo(int prvocislo) - vypíše předané prvočíslo v odpovídajícím tvaru
a vystup ma vyzerat takto:

Zadej max. cislo: 20
---Vysledky---
2, 3, 5, 7, 11, 13, 17, 19,

import java.util.Scanner;

public class Ppa1_cv04_5_A16B0052K {
    public static void main(String[] args) {
        Scanner sc = new Scanner (System.in, "Windows-1250");
        int a,b;
        boolean jeprvocislo;

        System.out.println("Zadej max. cislo: ");

        int MaxCislo = sc.nextInt(); //zadane maximalne cislo

        System.out.println("---Vysledky---");

            for (a = 2; a < MaxCislo; a++) {
                jeprvocislo = true;

            for (b = 2; b <= a/b; b++)
                if ((a%b) == 0) jeprvocislo = false; {
                    if (jeprvocislo)   //vypocet prvocisel
                    System.out.println(a);
                }
        }
    }
    }
Editováno 18.10.2016 22:48
 
Nahoru Odpovědět 18.10.2016 22:46
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na NunuKrysa
ostrozan:18.10.2016 23:02

Místo Systém.out.prin­tln(a); použij

Systém.out.format("%s,", a);

println automaticky přidá znak odřádkování a proto ti to píše pod sebe

Editováno 18.10.2016 23:04
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 18.10.2016 23:02
Avatar
NunuKrysa
Člen
Avatar
Odpovídá na ostrozan
NunuKrysa:19.10.2016 13:45

Paráda, ďakujem presne to som potrebovala :)
Až na ten Systém :D

Editováno 19.10.2016 13:45
 
Nahoru Odpovědět 19.10.2016 13:45
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na NunuKrysa
ostrozan:19.10.2016 14:51

Není zač
Jinak já jsem původně napsal "System", ale můj mobil usoudil, že neovládám pravopis a tak mně opravil :-)

 
Nahoru Odpovědět 19.10.2016 14:51
Avatar
NunuKrysa
Člen
Avatar
NunuKrysa:19.10.2016 22:35

:) to poznam..a este sa spytam k tomu formatovaniu, mam
int x = napr. 543
int y = napr. 2
a potrebujem zadat int z. To ma byt - z x vybrat pocet cislic y sprava. Cize int z by v tomto pripade bolo 43. Akym sposobom by som mala deklarovat int z ?

 
Nahoru Odpovědět 19.10.2016 22:35
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na NunuKrysa
pocitac770:20.10.2016 2:53

Můžeš si například číslo převést na text, následně získat kus přes substring (vypočítáš si počáteční index pomocí délky textu a y), a to si převedeš zpět na číslo...

 
Nahoru Odpovědět 20.10.2016 2:53
Avatar
Vojta Bereščák:20.10.2016 10:08

No tak to je opravdu osklive. Co takhle (pseudokod)
x mod 10^y

 
Nahoru Odpovědět  +1 20.10.2016 10:08
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na NunuKrysa
ostrozan:20.10.2016 12:35

čili

int  x = 2;
int y = 12345;
int z = (int)((double)y%Math.pow(10,(double)x);

//vysledek  45
Editováno 20.10.2016 12:36
 
Nahoru Odpovědět 20.10.2016 12:35
Avatar
NunuKrysa
Člen
Avatar
NunuKrysa:20.10.2016 14:42

Tak hotovo vytvorila som tri premenne:

int c = a % 1000;
    int d = a % 100;
    int e = a % 10;

a uz len dosadzovala do if-ov :D

if (a>9 && a<100 && b ==1) {
       System.out.println(e);
   }
   if (a>9 && a<100 && b ==2) {
       System.out.println(d);
   }
   if (a>9 && a<100 && b >2) {
       System.out.println("Cisla " + a +" a " + b +" jsou chybne zadana");

napriklad...sice to bolo trochu zdlhave ale som zaciatocnicka, tak hlavne ze to funguje :D

 
Nahoru Odpovědět 20.10.2016 14:42
Avatar
NunuKrysa
Člen
Avatar
NunuKrysa:20.10.2016 14:43

No ale nabuduce budem mysliet na to, ze to ide aj jednoduchsie :D

 
Nahoru Odpovědět 20.10.2016 14:43
Avatar
NunuKrysa
Člen
Avatar
NunuKrysa:20.10.2016 16:55

A ešte otázka, čo ak by som chcela z čísla (užívateľ zadá ľubovolne) napr. 35987 použiť prvé dve cifry (35) ? dá sa to aj inak ako cez string ?

 
Nahoru Odpovědět 20.10.2016 16:55
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na NunuKrysa
ostrozan:20.10.2016 17:02
int  x = 2;
int y = 12345;
int z = (int)((double)y/Math.pow(10,(double)x);

//vysledek  12
 
Nahoru Odpovědět 20.10.2016 17:02
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na ostrozan
Lubor Pešek:20.10.2016 17:18

:) na to bych moc nespoléhal:)
když už třeba pracuješ s devítkami, viz když si za y dosadíš 99999, už ti to nejde:)

Nahoru Odpovědět 20.10.2016 17:18
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na NunuKrysa
Lubor Pešek:20.10.2016 17:21

můžu se jen zeptat, proč se takhle ptáš? když už potřebuješ pracovat s prvními dvěma znaky, tak bys to určitě měla převést na pole Stringu. Co máš proti řetězcům?:)

Nahoru Odpovědět 20.10.2016 17:21
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Lubor Pešek
ostrozan:20.10.2016 17:49

Nevím proč by to nemělo fungovat při devítkách, ale v podstatě máš pravdu - je to blbost - nenechá to tam první dvě čísla, ale odstraní poslední dvě.

 
Nahoru Odpovědět 20.10.2016 17:49
Avatar
NunuKrysa
Člen
Avatar
NunuKrysa:20.10.2016 17:49

nic proti nim nemam :D ja len ze ci neexistuje nieco jednoduchsie nejak to oindexovat ako int a potom len vybrat prve dva indexy :D alebo to nejak sformatovat nech vypise len prve dva znaky zlava.. :D

Editováno 20.10.2016 17:51
 
Nahoru Odpovědět 20.10.2016 17:49
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na ostrozan
Lubor Pešek:20.10.2016 17:52

já neřekl, že to nefunguje, ale že to nejde:) podle požadovaného výsledku touto cestou nikam nedojdeš. Musíš to zkoušet na nejkrajnějších případech:), ale jinak dobrý pokus:)

Nahoru Odpovědět 20.10.2016 17:52
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:20.10.2016 18:00
public void getFirstAndThirdCharsFromInt(int number) {
        String[] fieldOfNumbers = String.valueOf(number).split("");
        System.out.println(fieldOfNumbers[0] + ", " + fieldOfNumbers[2]);
}

To ti nepříjde jednoduché?:D
potřebuješ k tomu akorát pomocné pole (když bys chtěla, ani to není potřeba, ale už by to bylo vcelku nepřehledné viz spodní kód), metodu pro přetypování na String (String.valueOf() ), vstupní Integer a výstup, kam narveš tolik hodnot z pole, kolik chceš. A kdybys chtěla prvních 10, tak tam akorát narveš jednu for-each loopu a směješ se jak pětikačka

public void getFirstAndThirdCharsFromInt(int number) {
        System.out.println(String.valueOf(number).split("")[0] + ", " + String.valueOf(number).split("")[2]);
}
Nahoru Odpovědět 20.10.2016 18:00
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Vojta Bereščák:23.10.2016 12:21

Tak mala ukazka proc je spatne pracovat se stringama:

public class TimeTest {
        private static final int LOOP_COUNT =  1_000_000_000;

        public static void main(String[] args) {
                int n_base = 12345670;
                int n_count = 2;

                long startTime = System.currentTimeMillis();

                for(int i = 0; i < LOOP_COUNT; i++) {
                        int value = (int)((double)n_base%Math.pow(10,(double)n_count));
                }

                System.out.println("Cas: " + (System.currentTimeMillis() - startTime));

                startTime = System.currentTimeMillis();

                for(int i = 0; i < LOOP_COUNT; i++) {
                        String s = String.valueOf(n_base);
                        int value = Integer.parseInt(s.substring(s.length() - n_count));
                }

                System.out.println("Cas: " + (System.currentTimeMillis() - startTime));
        }
}

vystup:

Cas: 7321
Cas: 52779

Ja vim ze to je lakavy delat takovyhle veci stylem "tak jak by jsme to delali, kdyby jsme to delali na papire", ale programatori maj za ukol setrit prostredky a trochu nad problemem premyslet.

 
Nahoru Odpovědět 23.10.2016 12:21
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:23.10.2016 13:09

promiň, trošku mě uniká, jak to souvisí s výše uvedeným problémem:) a jen bych ještě doplnil tu tvou poznámku.... Programátor musí hlavně psát tak kód, aby mu porozuměl někdo druhý a aby se v něm vyznal.

Navíc se mi nezdá, že by to byl zrovna 2x čistý kód...nejvíc mě překvapuje ta druhá loopa... ty nejdřív přetypuješ integer na String a pak ho přetypováváš zpátky? proč jsi to normálně nepoužil jako jeho hodnotu? právě tímto způsobem postupuješ, jako bys to dělal ručně na papíru:)

PS: to o čem jsi mluvil znamená především, že implementuješ nějakou metodu, která globálně zajistí nějakou funkci. Tys navíc teď napsal prakticky strukturovaný kód (v Javě) fuj.

Nahoru Odpovědět 23.10.2016 13:09
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
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 23 zpráv z 23.