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

Programing basics exam 7 may задача 3

здравейте задачата ми гърми на 2 теста в jude и искам да попитам къде ми е грешката?

 

 

 

package com.company;

import java.util.Scanner;

public class Main {
private static String repeat(String str , int count){
    String result ="";
    for (int i = 0; i <count ; i++) {
     result+=str;
    }
    return result;
}
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);

String season = console.nextLine().toLowerCase();
String group = console.nextLine().toLowerCase();
double schuler = Double.parseDouble(console.nextLine());
double nights = Double.parseDouble(console.nextLine());
double price =0;
double total=0;

String sport ="";
if(group.equals("boys")||group.equals("girls")){
if(season.equals("summer")){
    if(group.equals("boys")){
        sport="Football";
    }else if(group.equals("girls")){
     sport="Volleyball";
    }
price =15;
total=schuler*price*nights;
    if(schuler>=50){
        total-=total*0.5;
    }else if(schuler>=20&&schuler<50){
        total-=total*0.15;
    }else if(schuler>=10&&schuler<20){
        total-=total*0.05;
    }
}else if(season.equals("spring")){
    if(group.equals("boys")){
        sport="Tennis";
    }else if(group.equals("girls")){
        sport="Athletics";
    }
price=7.2;
    total=schuler*price*nights;
    if(schuler>=50){
        total-=total*0.5;
    }else if(schuler>=20&&schuler<50){
        total-=total*0.15;
    }else if(schuler>=10&&schuler<20){
        total-=total*0.05;
    }
        }else if(season.equals("winter")){
    if(group.equals("boys")){
        sport="Judo";
    }else if(group.equals("girls")){
        sport="Gymnastics";
    }
price =9.6;
    total=schuler*price*nights;
    if(schuler>=50){
        total-=total*0.5;
    }else if(schuler>=20&&schuler<50){
        total-=total*0.15;
    }else if(schuler>=10&&schuler<20){
        total-=total*0.05;
    }
}}else {
    if(season.equals("winter")){
        sport="Ski";
        price =10;
        total=schuler*price*nights;
        if(schuler>=50){
            total-=total*0.5;
        }else if(schuler>=20&&schuler<50){
            total-=total*0.15;
        }else if(schuler>=10&&schuler<20){
            total-=total*0.05;
        }
    } else if(season.equals("spring")){
        sport="Cycling";
        price=9.5;
        total=schuler*price*nights;
        if(schuler>=50){
            total-=total*0.5;
        }else if(schuler>=20&&schuler<50){
            total-=total*0.15;
        }else if(schuler>=10&&schuler<20){
            total-=total*0.05;
        }else if(season.equals("summer")){
         sport="Swimming";

            price =20;
            total=schuler*price*nights;
            if(schuler>=50){
                total-=total*0.5;
            }else if(schuler>=20&&schuler<50){
                total-=total*0.15;
            }else if(schuler>=10&&schuler<20){
                total-=total*0.05;
            }
        }
    }
}
        System.out.printf("%s %.2f lv.",sport,total);
    }}
0
Programming Basics
KeepCoding avatar KeepCoding 554 Точки

Ето го кодът само с една корекция (преместих една къдрава скоба): https://pastebin.com/P4qHtPWw
Грешката беше, че в тялото на 

if (season.equals("spring"))

влиза и кодът за случая

if (season.equals("summer"))

Т.е.  "if (season.equals("summer"))" в логиката на кода ти е вложена проверка, свързана с проверките за броя на учениците. Ако бройката е еди каква си то тогава... , ако е еди каква си то тогава ... и изведнъж от проверка на бройка на ученици се извършва проверка за сезонът. Нормално е да се правят такива грешки с толкова много вложени проверки. Моите съвети да избягваш такива повторни грешки са:

1) Ако се повтаря много код, намери начин да опростиш нещата. В този случай правиш проверка за бройката на учениците във всяка проверка за сезон като може да се направи и извън тези проверки. Аз съм го направил по такъв начин в началото на кода ми: https://pastebin.com/5pFmry2Y 

2) Ако преместиш текстовия редактор пред/зад къдрава скоба, ще видиш как IntelliJ подчертава и двете къдрави скоби, които обособяват тяло/блок от код.

1
Angel_Kalinkov avatar Angel_Kalinkov 111 Точки

Здравей Росене! Този метод, който го пишеш в началото е напълно излишен за тази задача. Той ще ти свърши работа, ако трябва да нарисуваш нещо. Моето решение е малко по-различно. Разгледай го, надявам се да ти е от полза: https://pastebin.com/6Aajb6Ex

0
10/12/2017 14:53:12
RosenTheHacker avatar RosenTheHacker 7 Точки

здравей.

знам че метода е излишен, но пък и няма да пречи на програмата.

Иначе благодаря!

0