Diskuze: Vypisanie hodnot ako textu
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 23 zpráv z 23.
//= 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.
ideální by bylo postnout kód
Vypisuješ standardním výstupem?
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);
}
}
}
}
Místo Systém.out.println(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
Paráda, ďakujem presne to som potrebovala
Až na ten Systém
Není zač
Jinak já jsem původně napsal "System", ale můj mobil usoudil, že
neovládám pravopis a tak mně opravil
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 ?
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...
No tak to je opravdu osklive. Co takhle (pseudokod)
x mod 10^y
čili
int x = 2;
int y = 12345;
int z = (int)((double)y%Math.pow(10,(double)x);
//vysledek 45
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
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
No ale nabuduce budem mysliet na to, ze to ide aj jednoduchsie
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 ?
int x = 2;
int y = 12345;
int z = (int)((double)y/Math.pow(10,(double)x);
//vysledek 12
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:)
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?:)
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ě.
nic proti nim nemam ja len ze ci neexistuje nieco jednoduchsie nejak to oindexovat ako int a potom len vybrat prve dva indexy alebo to nejak sformatovat nech vypise len prve dva znaky zlava..
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:)
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]);
}
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.
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.
Zobrazeno 23 zpráv z 23.