Loading...
antonp1p2 avatar antonp1p2 17 Точки

{Java OOP Basics} Defining Classes => Problem 11 Cat Lady

Здравейте, поради някаква причина в Judge-a тази задача ми минава само единия от 5-те теста, а на останалите ми дава Runtime Error. 

Наистина първоначално бях написал задачата малко хаотично и хабях излишни ресурси и време и с някви цикълчета излишни и все пак би няма нещо кой знае какво в решението, което да бави толкова. 

След това оптимизирах, даже прегледах и видеото от упражнението където е решена задачата и правх if-else проверки в while() цикъла и от видеото видях че ползва момичето switch, реално switch-a e по-бърз от if-else, и switch даже сложих и пак ми минава само 1/5 теста, останалите 4 са Runtime error. Ето ми го решението -->
 

package Prob11;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

abstract class Cat{

    private String name;

    public Cat(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class Siamese extends Cat {

    private int earSize;

    public Siamese(String name, int earSize) {
        super(name);
        this.earSize = earSize;
    }

    public int getEarSize() {
        return earSize;
    }

    public void setEarSize(int earSize) {
        this.earSize = earSize;
    }

    @Override
    public String toString() {
        return String.format("Siamese %s %d", super.getName(), this.earSize);
    }
}

class Cymric extends Cat {

    private int furLenght;

    public Cymric(String name, int furLenght) {
        super(name);
        this.furLenght = furLenght;
    }

    public int getFurLenght() {
        return furLenght;
    }

    public void setFurLenght(int furLenght) {
        this.furLenght = furLenght;
    }

    @Override
    public String toString() {
        return String.format("Cymric %s %d", super.getName(), this.furLenght);
    }

}

class StreetExtraordinaire extends Cat {

    private int decibels;

    public StreetExtraordinaire(String name, int decibels) {
        super(name);
        this.decibels = decibels;
    }

    public int getDecibels() {
        return decibels;
    }

    public void setDecibels(int decibels) {
        this.decibels = decibels;
    }

    @Override
    public String toString() {
        return String.format("StreetExtraordinaire %s %d", super.getName(), this.decibels);
    }
}


public class Prob11Main {
    public static void main(String[] args) throws IOException {
//        Scanner scanner = new Scanner(System.in);
        BufferedReader scanner = new BufferedReader(new InputStreamReader(System.in));
        String inputLine = scanner.readLine();
//        List<Cat> cats = new ArrayList<>();
        HashMap<String, Cat> cats = new HashMap<>();

        while(!inputLine.equals("End")){
            String[] splitTheLine = inputLine.split(" ");
            String breed = splitTheLine[0];
            String name = splitTheLine[1];
            int specification = Integer.valueOf(splitTheLine[2]);
            Cat cat  = null;

            switch (breed){
                case "Siamese" :
                    cat = new Siamese(name, specification);
                    break;
                case "Cymric" :
                    cat = new Cymric(name, specification);
                    break;
                case "StreetExtraordinaire" :
                    cat = new StreetExtraordinaire(name, specification);
                    break;
            }

            cats.put(name, cat);

//            if(breed.equals("Siamese")){
//                Cat cat = new Siamese(name, specification);
//                cats.add(cat);
//            }else if(breed.equals("Cymric")){
//                Cat cat = new Cymric(name, specification);
//                cats.add(cat);
//            }else {
//                Cat cat = new StreetExtraordinaire(name, specification);
//                cats.add(cat);
//            }
            inputLine = scanner.readLine();
        }

        String theCatsName = scanner.readLine();

        System.out.println(cats.get(theCatsName));

//        for(int i = 0; i < cats.size(); i++){
//            if(theCatsName.equals(cats.get(i).getName())){
//                System.out.println(cats.get(i).toString());
//            }
//        }
    }
}

 

Тагове:
0
Fundamentals Module
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

Щом ти гърми с Runtime най - вероятно е някъде при парсванията. Сложи

 int specification = Integer.valueOf(splitTheLine[2]);

в един try - catch блок и тествай. Струва ми се, че и не принтираш правилно резултата.

Успех

1
Jinjaar avatar Jinjaar 348 Точки

Здравей!
Прегледах решението ти.

Докарах го до 40 точки без условието , тъй като нямам достъп до материалите.Runtime идва от това че ползваш %d защото му подаваш Integer , а този плейс холдър е за decimal integer. Лично аз използвам Scanner за взимане на инпут-а като ползвам метода му .nextLine() което взима цялата линия.Също така по-добре използвай Integer.parseInt(); за парсване от стринг към някъкав тип.
Съжелявам че немога да помогна повече... но на сляпо няма как без условие, тъй като нямам достъп до ресурсите... за което СофтУни доста си противоричи с това което казва на хората, че материалите им са достъпни, но както и да е не е за тук тази тема.

Поздрави!

1
antonp1p2 avatar antonp1p2 17 Точки

И аз по принцип използвам scanner, тук го пробвах това, за да видя дали runtime-a не идва заради него. Реално не знам кое от двете е по-бързо сега ще проверя... А пък реално грешката идва от полето със спецификациите, работи пробвах с Double и със Стринг работи, но сега като ти чета отговора може би работи заради промяната на плейс холдър-а. Както и да е нагодих я да работи мерси. 

П.С. Изключително много ме дразни това което направиха с ограчението за използване на ресурси от курсове, които не си записал. Преди го нямаше това и можеше да си влезеш и да гледаш всичко и да теглиш всичко. Не отиват на добре нещата и почват да алчнеят, но не е за тука наистина тая тема.

0
Jinjaar avatar Jinjaar 348 Точки

Попринцип аз вече съм завършил, но продължавам да следя форума и гледам да помагам с каквото мога.Около това се гради цялата ни професия - помагат / помагаш, но на доста хора няма как да помогнеш след като нямам достъп до материалите.Това беше най-голямата простотия която можеше да се измисли.

Успех с обучението ви пожелавам.

0
kaloyannikov avatar kaloyannikov 531 Точки

Ползваме вече BufferedReader ,защото е по-бърз от скенера като се губят някои яки методчета на Scanner-a като nextInt да речем.

 

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