Професионална програма
Loading...
+ Нов въпрос
igrilkul avatar igrilkul 0 Точки

Задача 11 Odd/Even position от Цикли

Здравейте, имам проблем със запетаите, вече повече от час се мъча да го измъдря, ама не се получава. Ако ги оставя с нулите double-ите Judge ми връща грешка, но ако ги форматирам да принтирва цели числа пак ми връща грешка (1.5, 2.5, 1.75 и т.н.). Въпросът ми е как може да премахнем само ненужните нули. Пробвах с DecimalFormat но нещо не мога да му схвана цаката и някъде го бъркам сигурно.
Ето моят код: https://pastebin.com/eMiCYpyS

Тагове:
0
Programming Basics
igrilkul:
задачата е решена
traykova44 avatar traykova44 93 Точки
Best Answer

bool , int, string

https://pastebin.com/dkT8uACJ

0
Todor030366 avatar Todor030366 10 Точки

На пръв поглед:

DecimalFormat format = new DecimalFormat("#.#")

трябва да е 

DecimalFormat format = new DecimalFormat("#.##");

 

Ако е същата задачата, защото не си дал линк към задачата. 

0
igrilkul avatar igrilkul 0 Точки

На С# видях как става вече, но аз С# не знам и се мъча на Java 

0
mobretenova avatar mobretenova 1 Точки

Моля, помогнете и на мен.

Същата задача, същият проблем.

Пробвах, следвайки вашите коментари, но не приема "df" от 

{System.out.printf("OddSum=%s%n", df.format(oddSum));} - оцветява го в червено.

Кодът:

import java.text.DecimalFormat;
import java.util.Formatter;
import java.util.Scanner;

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

        double n = Double.parseDouble(console.nextLine());
        double oddSum = 0.0;
        double evenSum = 0.0;
        double oddMinNumber = 1000000000.0;
        double oddMaxNumber = -1000000000.0;
        double evenMinNumber = 1000000000.0;
        double evenMaxNumber = -1000000000.0;
        DecimalFormat format = new DecimalFormat("#.##");

        for (int i = 1; i <= n; i++) {
            Double currentNumber = Double.parseDouble(console.nextLine());
            if (i % 2 != 0) oddSum += currentNumber;
            else evenSum += currentNumber;
            if (currentNumber > oddMaxNumber && (i % 2 != 0)) {oddMaxNumber = currentNumber;}
            if (currentNumber > evenMaxNumber && (i % 2 == 0)) {evenMaxNumber = currentNumber;}
            if (currentNumber < oddMinNumber && (i % 2 != 0)) {oddMinNumber = currentNumber;}
            if (currentNumber < evenMinNumber && (i % 2 == 0)) {evenMinNumber = currentNumber;}
        }

        {System.out.printf("OddSum=%s%n", df.format(oddSum));}
            if (oddMinNumber == 1000000000.0) {System.out.println("OddMin=No");}
                else {System.out.println("OddMin=" + oddMinNumber + ",");}
            if (oddMaxNumber == -1000000000.0) {System.out.println("OddMax=No");}
                else {System.out.println("OddMax=" + oddMaxNumber + ",");}
        {System.out.println("EvenSum=" + evenSum + ",");}
            if (evenMinNumber == 1000000000.0) {System.out.println("EvenMin=No");}
            else {System.out.println("EvenMin=" + evenMinNumber + ",");}
            if (evenMaxNumber == -1000000000.0) {System.out.println("EvenMax=No");}
            else {System.out.println("EvenMax=" + evenMaxNumber + ",");}
        }
    }

0
mobretenova avatar mobretenova 1 Точки

Намерих начин.

0
TodorNikolov avatar TodorNikolov 12 Точки

Здравей,

Опитай да направиш форматирането използвайки:

DecimalFormat df = new DecimalFormat("0.#####");     като при принтирането на резултата използваш това:

System.out.printf("OddSum=%s", df.format(oddSum));

Спестил съм ти останалите променливи. Опитай и кажи, дали се получава :) При мен се получи!

0
igrilkul avatar igrilkul 0 Точки

Стана! Явно формата ги връщал като стринг резултата и оттам идвала грешката ми. Благодаря!

0
TodorNikolov avatar TodorNikolov 12 Точки

Радвам се, че помогнах!

0
tdk928 avatar tdk928 108 Точки

Здравей, задачата е кофти заради форматирането.Предлагам ти моето решение https://pastebin.com/XaFTQkty .Цаката на decimalformat e ,че закръгля толкова знака след запетаята колкото "#" имаш.В твоето решение ще закръгля само 1 знак и това не ти върши работа за judge.Също така те съветвам да кръщаваш променливите с по-описателни имена защото аз не разбрах какво е u/p.
П.С Понеже в Java double minValue/maxValue i 2-те са положителни числа не като една от по-предните задачи която е с int и там int maxvalue/minvalue са съответно + и - няколко милиарда може да използваш тях например double emax = Integer.MIN_VALUE/MAX_VALUE.

0