Loading...

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

Chetiov avatar Chetiov 5 Точки

Зеленчукова борса

Задачка на Java.

Градинар продавал реколтата от градината си на зеленчуковата борса. Продава зеленчуци за N лева на килограм и плодове за M лева за килограм. Напишете програма, която да пресмята приходите от реколтата в евро ( ако приемем, че едно евро е равно на 1.94лв).

Ограничения: Всички числа ще са в интервала от 0.00 до 1000.00

 

Привет. Срещам проблем с ограничаване на въвежданите стойности в интервала 0.00 до 1000.00 . Не ми е много ясно как до го направя. Сигурно е нещо простичко но за начинаещ всичко е сложно ;)

Ето моето решение: (В джъджа изкарва 90 от 100 именно защото гърми при вход на число по голямо от 1000)

import java.util.Scanner;

public class zelenchuci {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);

        double vegInLv = Double.parseDouble(console.nextLine());
        double fruitsInLev = Double.parseDouble(console.nextLine());
        int vegKg = Integer.parseInt(console.nextLine());
        int fruitKg = Integer.parseInt(console.nextLine());

        System.out.println((vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94);

 

    }
}

 

Тагове:
0
Programming Basics
vancho avatar vancho 430 Точки

Гледам, че си използвал double за пресмятане на пари. В java се използва BigDecimal за пари. Може това да ти е проблема. Но ако искаш да ограничиш числа над 1000:

 

import java.util.Scanner;

public class zelenchuci {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);

        double vegInLv = Double.parseDouble(console.nextLine());
        double fruitsInLev = Double.parseDouble(console.nextLine());

        if (vegInLv <= 1000 && fruitsInLev <= 1000) {
              int vegKg = Integer.parseInt(console.nextLine()); // или това, незнам какво се иска точно
              int fruitKg = Integer.parseInt(console.nextLine()); // или това, незнам какво се иска точно

             System.out.println((vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94); 

        } 

   }
}

-1
17/11/2016 16:55:30
GallyaNs avatar GallyaNs 23 Точки

Слагаш една проверка if(console < 0.00 || console > 1000.00) и на else ти е същинският код

0
worminer avatar worminer 104 Точки

пробвай да направиш следното
System.out.println(((vegInLv * vegKg) + (fruitKg * fruitsInLev)) / 1.94);
макар че то би трябвало само да се сеща ама никога не го знаеш..
според мен това "Ограничения: Всички числа ще са в интервала от 0.00 до 1000.00" означава че всички числа ще са от тип double/float а си използвал int което е по вероятно като грешка..

в джъджа попринцип някой път може да видиш какви входни данни ти вкарват и според това да прецениш каде е проблема..

Те ти казват, че най голямото число ще е 1000,00 и най малкото ще е 0 като данни които ти подават.. а не че трябва ти ръчно да ги ограничиш.. иначе с един if може да се ограничи ръчно

if (chisloto >=0 && chisloto <= 1000)
{
// направи действие
}

 

0
17/11/2016 16:33:32
e.petrova avatar e.petrova 94 Точки

Здравей колега, след кратко Research-ване, намерих решение на проблема ти.

import java.math.BigDecimal;
import java.util.Scanner;

public class zelenchuci {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);

        double vegInLv = Double.parseDouble(console.nextLine());
        double fruitsInLev = Double.parseDouble(console.nextLine());
        int vegKg = Integer.parseInt(console.nextLine());
        int fruitKg = Integer.parseInt(console.nextLine());
        double result = (vegInLv * vegKg + fruitKg * fruitsInLev) / 1.94;
        BigDecimal sumInEuro = new BigDecimal(result);
      System.out.println(sumInEuro );

 

    }
}

Надявам се, да съм помогнала. :)

0
worminer avatar worminer 104 Точки

Здравей.
Немисля че е добра идея да запазваш резултата в double и после просто да го преместваш в BigDecimal.. или го запазваш директно в BigDecimal и принтираш или просто принтираш цялото нещо защото  така се губи точност..
 

0
Chetiov avatar Chetiov 5 Точки

Хей благодаря това изкара 100 от 100! Но съвсем не знам защо се използва това BigDecimal и какъв изобщо е бил проблемът.

0
e.petrova avatar e.petrova 94 Точки

Съгласна съм че точността се губи, но проблема според мен идва от това, че числото е твърде голямо. Нека някой по компетентен да обясни. В случая имаме цена и би трябвало да се използва направо decimal. Но как става това в Java, не знам.

0
17/11/2016 17:44:34
Chetiov avatar Chetiov 5 Точки

Ами въпросната задачка се намира тук

Пробвах с горепосочените предложения но си продължава да дава 90 от 100. Не знам точно какъв е проблема просто си мислех че е от импут по голям от 1000. :(

0
worminer avatar worminer 104 Точки

Здравей. 
ами на същия линк е дадено решението на автора което обаче е на C# и би озглеждало точно като твоето нещо ако се преведе към java.. което е интересно..
 

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