Опитвам се да измисля решение без arrays, както и се очаква.
Логиката ми е следната:
Инициализирам variable discount = 0;
Потребител въвежда общия брой N на продуктите/цените
Първи for loop задава N пъти нови полета за въвеждане на отделните цени
3.1. Същият for loop обновява variable discount с 35% от въведената от потребителя ценя ** Тук някъде греша **
Втори for loop показва variable discount в толкова редове, колкото потребителят първоначално е въвел (N).
Проблемът обаче е, че винаги се появява discount-a на последно въведената цена - тъй като не знам как discount variable-a да се запазва някъде след всеки iteration на първия loop.
for (int i = 1; i <= n; i++) {
String price = userInput.nextLine();
itemPrice = Double.parseDouble(price);
discounted = itemPrice * (1 - 0.65);
System.out.println(decimals.format(discounted));
}
За съжаление показва отстъпката след всяко написване на цена, а задачата е списъкът с отстъпките да се покаже накрая, след като потребителят е въвел всички цени. Редактирах си първия пост с условието, за да е по-ясно.
Пробвах и нещо по-екстравагантно от сорта на втори for loop в първия, чиято променлива да започва след като първия loop свръшва (int j = n+1; j <= (n+n)+1; j++), но изглежда не работят така нещата на практика.
Ако имате някакви идеи, ще се радвам да чуя.
П.С. А код с принтирането на променливата discount извън самия for loop, показва единствено отстъпката на последно въведената цена, като прескача всички други - което ме връща на първоначалния проблем.
Ами, ако искаш наведнъж, което се съмнявам judge да иска Напиши го с масив-че ето ти бърз код , но на C# , мисля че ще го разбереш, макар че не е на твоя език !
И един съвет , недей да робуваш на тези очаква се без лист , масив и тн… , имай предвид че винаги ще трябва да търсиш и да гледаш някакви неща напред, като цяло програмата е направена така, че да те стимулира да се ровиш сам и да research-ваш някакви неща , никой никога няма да ти каже "НЕ, за тази задача не може да използваш ТОВА или онова, защото е от следващата лекция… "
Горният код с един for loop и println вътре получава 80 от 100 точки:
Досетих се, че проблемът е може би свързан с Math rounding, който се споменава в задачата, и затова махнах NumberFormat decimals = new DecimalFormat("#0.00"); и decimals.format от самия println накрая.
На тяхно място сложих следното в самия for loop, което ми изкара 100 от 100 точки:
Сега остава единствено да разберем, как авторите на задачата биха я решили с loop, така че отстъпките да се появяват накрая в списък след като потребителят е въвел всички цени.
Ще попитам на другия уъркшоп и ще споделя тук решение.
Предполагам че вътре в Loop-а, можеш да направиш един StringBuilder и просто да прибавяш всяка отстъпка към настоящият string + \n за може да ти бута всяка нова отстъпка на нов ред. И накрая просто принтираш ; )