Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

miroLLL avatar miroLLL 95 Точки

За да не правя нова тема за един елементарен въпрос от един ред ще го задам тук в тази.

System.out.printf("%10s|", Integer.toBinaryString(a).replace(' ', '0'));

Този ред код е част от задачката за форматиране на числа от домашното. Питам се само, защо не работи .replace метода?

При въвеждане на а = 2, принтира "10" и 8 празни места...

0
23/03/2016 18:05:21
baxlash avatar baxlash 31 Точки

Пробвай така:

String binary = String.format("%10s",Integer.toBinaryString(firstNumber)).replace(' ', '0');
System.out.println(binary);

 

1
23/03/2016 18:16:19
IskrenPenev avatar IskrenPenev 177 Точки
String binA = Integer.toString(a,2);

        System.out.printf("|%-10X|%010d|%10.2f|%-10.3f|",
                a, Integer.parseInt(binA), b, c);

аз го направих така - първо прехвърлих десетичното число в стринг (да го изпише като binary) след това когато пробвах да изпиша нули пред стринга с "%10s", binA и при мен изписваше само 10 празни места, да добавя нули отпред не стана и затова се разрових. Накрая отрких, че 0-ли пред стринг не можеш да добавиш, затова стринга binA го парс-вам отново към целочислено число ( ако в твоя случай а = 2 , стринга е станал 10). С "%010d" си изписваш числото (10) и добавяш отпред нули докато запълниш зададената ширина от 10 символа.

Малко объркано обясних май но - с 2 думи: след като го направиш на стринг го парсни отново към int и ползвай плейсхолдъра за целочислени числа - с него можеш пред числото да си добавяш нули.

1
23/03/2016 18:24:22
miroLLL avatar miroLLL 95 Точки

Благодарско, сега го изкара.

Явно трябва, да се форматира отделно в стринг и после да се принтира, a не да се форматира директно в sout-a...

Ясно, мерси! :))

+1

П.п - Евела, на хейтъра, който ми е дал -1 за това, че не съм разбрал нещо и съм пуснал тема за да го науча... :)

Жив и здрав! :*

0
23/03/2016 18:32:33
kaloyannikov avatar kaloyannikov 531 Точки
String aBinary = Integer.toString(firstN, 2);
        System.out.printf("|%-10x|%s|%10.2f|%-10.3f|",firstN,("0000000000" + aBinary).substring(aBinary.length()),secondN,thirdN);

Oще един вариант .

1
miroLLL avatar miroLLL 95 Точки

Дамм, варианти много... :)

Това е хубавото, когато не си разбрал нещо и пуснеш една тема в форума и те засипят с решения на твоя толкова "труден" проблем. И след това като дойде момент, в който ти се налага да използваш наученото от ситуацията, в която си изпаднал се сещаш за толкова много решения и трудно може да ги забравиш...

Благодарско! :)

0
Filkolev avatar Filkolev 4482 Точки

Аз бих ти дал минус (но обикновено не го правя в такива случаи), защото задаваш въпрос, чийто отговор е добре известен и може да се намери с минимални усилия. Би било оправдано ако беше в секцията Основи на програмирането, където хората са съвсем неориентирани, но във Fundamental вече би трябвало да се демонстрира повече усилие при разнищването на подобен род проблеми.

1
miroLLL avatar miroLLL 95 Точки

Щом казваш... :) Аз няма да задам подобен въпрос ако знам отговора или се правя на "някой си" само за да отворя подобна тема. Направих ресърч и открих, че алтернатива за .Padleft-a в C# е .replace метода. Пробвах го и не проработи. Мисля, че пробвах и тази опция, но незнайно защо не сработи и тя. След няколко неуспешни опита, просто реших да попитам тук във форма, защото знаех, че ще получа правилен, бърз и работещ отговор на проблема ми... Това е, но щом смяташ, че съм си заслужил минуса, така да е,. Няма сърдити. :)

Важното, е че научих това, което исках и предадох цялото домашно без липси в срок. Както се казва, "Продължаваме напред!"

0
25/03/2016 00:05:23
RoYaL avatar RoYaL Trainer 6849 Точки

Интересно ми е какво си потърсил. Току-що прочетох, че си търсил за алтернатива на padleft в Java, та просто написах "padleft java" в гугъл и ми излезе на първи резултат, точно това, което са ти отговорили по-рано - плейсхолдъри. Не го казвам с цел да се заяждам, а за да обменим опит и реално да се научим да намираме информация.

Иначе една насока от мен - вместо просто да опитваш варианти докато тръгне, опитай се да разбереш защо не работи конкретния ти вариант. Например какво очаква printf (и всякакви други формат методи): Плейсхолдър и след това стойност. Имаш плейсхолдъра, след това си подал резултата от стринга "Integer.toBinaryString(2)". Който ако сам по себе си го пуснеш в стринг, ще видиш че в него няма нито празни места, нито нули. Той е просто "10". Колкото и замени (replace) на празни места с нули да му сложиш, това няма да проработи. Така, че пред теб остава въпроса как първо да стигнеш до така желаната ситуация да има празни места. И, да, намерил си начинът - но той просто принтира. Сега, не знам дали съм прав, но на мен би ми щракнала някаква лампичка, че тъй като съм изпратил резултата вече да се принтира, няма кой знае какво повече да му форматирам, така че не ме устройва да го пращам за принтиране, и трябва да намеря начин да го запазя някъде. Та това е нещото, което ще потърся - как да запазя форматиран стринг - и ще стигна до String.format. И ето го твоето решение. В стринга "res" запазваме спейсовете и 10ката - String res = String.format("%10s", Integer.toBinaryString(2)); Сега като го имаме този стринг вече идва момента да replace-ваме. res = res.replace(' ', '0'); И woohoo - проработи. Сега като сме разбрали как са станали нещата можем да помислим дали няма възможност този плейсхолдър вместо да слага спейсове, да слага нули директно ;-) (което го установихме в първия абзац как става)

 

P.S.: Нямам за цел да те обезкуража да пишеш във форума, а по-скоро да те окуража да подобриш мисленето си и може би начините на търсене на информация.

 

1
25/03/2016 02:37:01
miroLLL avatar miroLLL 95 Точки

Дам, така е. Просто времето ме препираше и ми се бързаше да предам домашното в срок. Както казах, мисля, че се натъкнах на този вариант (правилния), но явно не съм го написал като хората, защото не проработи.. Както и да е, мерси на всички отзовали се, на макар и глуповатия ми въпрос. :)

+1

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.