{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());
// }
// }
}
}
Здравей!
Прегледах решението ти.
Докарах го до 40 точки без условието , тъй като нямам достъп до материалите.Runtime идва от това че ползваш %d защото му подаваш Integer , а този плейс холдър е за decimal integer. Лично аз използвам Scanner за взимане на инпут-а като ползвам метода му .nextLine() което взима цялата линия.Също така по-добре използвай Integer.parseInt(); за парсване от стринг към някъкав тип.
Съжелявам че немога да помогна повече... но на сляпо няма как без условие, тъй като нямам достъп до ресурсите... за което СофтУни доста си противоричи с това което казва на хората, че материалите им са достъпни, но както и да е не е за тук тази тема.
Поздрави!
И аз по принцип използвам scanner, тук го пробвах това, за да видя дали runtime-a не идва заради него. Реално не знам кое от двете е по-бързо сега ще проверя... А пък реално грешката идва от полето със спецификациите, работи пробвах с Double и със Стринг работи, но сега като ти чета отговора може би работи заради промяната на плейс холдър-а. Както и да е нагодих я да работи мерси.
П.С. Изключително много ме дразни това което направиха с ограчението за използване на ресурси от курсове, които не си записал. Преди го нямаше това и можеше да си влезеш и да гледаш всичко и да теглиш всичко. Не отиват на добре нещата и почват да алчнеят, но не е за тука наистина тая тема.
Попринцип аз вече съм завършил, но продължавам да следя форума и гледам да помагам с каквото мога.Около това се гради цялата ни професия - помагат / помагаш, но на доста хора няма как да помогнеш след като нямам достъп до материалите.Това беше най-голямата простотия която можеше да се измисли.
Успех с обучението ви пожелавам.
Ползваме вече BufferedReader ,защото е по-бърз от скенера като се губят някои яки методчета на Scanner-a като nextInt да речем.