Loading...
Dimityr81 avatar Dimityr81 1 Точки

07. 2D Rectangle Area java

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

public class inchTocm {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        double x1=Double.parseDouble(scanner.nextLine());
        double y1=Double.parseDouble (scanner.nextLine());
        double x2=Double.parseDouble(scanner.nextLine());
        double y2=Double.parseDouble (scanner.nextLine());
        //изчисляване на страните
        double width=Math.max(x1, x2)- Math.min(x1, x2);
        double height=Math.max(y1, y2)- Math.min(y1, y2);
        DecimalFormat decimalFormat=new DecimalFormat("#,#########");
        System.out.println(decimalFormat.format(width * height));
                System.out.println(decimalFormat.format(2*(width + height)));
    }
}

Това ми е сорс кода,но при регистриране в judje системата ми даде 60 от 100 точки .така и не можах да разбера грешката,при детайли. Вторият ми въпрос е защо се пише това :DecimalFormat decimalFormat=new DecimalFormat("#,#########");

Нов съм и съм в основата на основата.:)

Тагове:
0
Programming Basics
Vesso1980 avatar Vesso1980 486 Точки

Здравей, това форматиране в този случай изобщо не ти трябва. Иначе DecimalFormat е клас, който като като му направиш нова инстанция има метод format(), който ти форматира изхода в случая до 9 тия знак след запетаята и ще изпишат само толкова, колкото са. В смисъл ако имаш число 5, 5555 то няма да ти изпише 5,555500000 а само 5,5555, а ако искаш да има и нулите трябва форматът да ти изглежда така "#,000000000". А ако са повече, от 9 ти отрязва останалите. 

Относно задачата, проблемът е, че ако ти подадат отрицателни координати се получава отрицателен резултат, което е невъзможно фигура да има отрицателна площ и тн.. Затова взимаш абсолютните стойности на числата, за да си сигурен, че винаги ще имаш положителен резултат. 

Ето ти твоя код, малко поправен за 100%.

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

public class inchTocm {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        double x1=Double.parseDouble(scanner.nextLine());
        double y1=Double.parseDouble (scanner.nextLine());
        double x2=Double.parseDouble(scanner.nextLine());
        double y2=Double.parseDouble (scanner.nextLine());
        //изчисляване на страните
        double width=Math.abs(Math.max(x1, x2)- Math.min(x1, x2));
        double height=Math.abs(Math.max(y1, y2)- Math.min(y1, y2));
        System.out.println(Math.abs(width * height));
                System.out.println(2*(width + height));
    }
}

1
Dimityr81 avatar Dimityr81 1 Точки

Благодаря!!!

0
Angel_Kalinkov avatar Angel_Kalinkov 111 Точки

Здравей колега Dimityr81!

Колегата Vesso1980 ще ме извинява, но те въвежда в леко заблуждение. Това което е написал няма особен смисъл:

double width=Math.abs(Math.max(x1, x2)- Math.min(x1, x2));

double height=Math.abs(Math.max(y1, y2)- Math.min(y1, y2));

Дори и да бъдат подадени отрицателни координати, дължините на страните винаги ще бъдат положителни, защото когато от по-голямо отрицателно число вадим по-малко такова, се получава положително число. Ето защо, ако използваш Math.max и Math.min, няма нужда да се използва Math.abs и кодът ти ще изглежда така:

double width = Math.max(x1, x2) - Math.min(x1, x2);
double height = Math.max(y1, y2) - Math.min(y1, y2);

Ако използваш Math.abs няма значение кое ще бъде умаляемото и кое умалителя и кодът ти ще изглежда така:

double width = Math.abs(x1 - x2);
double height = Math.abs(y1 - y2);

или така:

double width = Math.abs(x2 - x1);
double height = Math.abs(y2 - y1);

Ако условието на задачата изисква 1500.5 да се отпечата като 1500.5, а 1500.0 като 1500 и пишеш на Java, можеш да го постигнеш като използваш DecimalFormat. В твоя код обаче забелязвам, че в patern-а "#,#########" използваш запетая като десетичен разделител, а трябва да е точка. Запетаята играе ролята на групов разделител, когато искаш числото да изглежда например така 100 000 000.

1
07/03/2018 22:21:53
donsavage avatar donsavage 4 Точки
import java.util.Scanner;

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

        double x1=Double.parseDouble(scanner.nextLine());
        double y1=Double.parseDouble (scanner.nextLine());
        double x2=Double.parseDouble(scanner.nextLine());
        double y2=Double.parseDouble (scanner.nextLine());

        //Request
        double width=Math.abs(Math.max(x1, x2)- Math.min(x1, x2));
        double height=Math.abs(Math.max(y1, y2)- Math.min(y1, y2));
        double total1 = (Math.abs(width * height));
        double total2 = 2 * (width + height);

        System.out.println(total1);
        System.out.println(total2);

    }
}



Ето още едно за 100 :)

  1. Постави този код в IDE-то;
  2. Рънни го;
  3. Въведи числата, които са за вход:

    60
    20
    10
    50

  4. Трябва да получиш:

1500.0

160.0

Получи ли се този резултат си готов :)

Успех !!! :)

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