HackerRank:-第4天:类与实例的比较,由于某些原因,有些奇怪的错误

时间:2020-03-03 18:09:34

标签: c++ c++14

此测试出错:-https://www.hackerrank.com/challenges/30-class-vs-instance/problem?h_r=next-challenge&h_v=zen 一个测试用例由于某种原因而失败,当我在IDE中运行它时,它提供了与预期相同的输出,可以帮助我找出我错过的内容,我是非常初级的编码员,从Civil Engg的背景移走,所以我很抱歉真是愚蠢。我的代码:

#include <iostream>
using namespace std;

class Person{
    public:
        int age;
        Person(int initialAge);
        void amIOld();
        void yearPasses();
    };

    Person::Person(int initialAge){
        if (initialAge < 0){
            this->age=0;
            cout << "Age is not valid, setting age to 0.";
        }
        else {
            this->age = initialAge;
        }

    }

    void Person::amIOld(){
        if(age < 13){
            cout << "\nYou are young.";
        }
        else if (age >= 13 && age < 18) {
            cout << "\nYou are a teenager.";
        }
        else {
            cout << "\nYou are old.";
        }
    }

    void Person::yearPasses(){
        age++;
    }

int main(){
    int t;
    int age;
    cin >> t;
    for(int i=0; i < t; i++) {
        cin >> age;
        Person p(age);
        p.amIOld();
        for(int j=0; j < 3; j++) {
            p.yearPasses(); 
        }
        p.amIOld();

        cout << '\n';
    }

    return 0;
}

2 个答案:

答案 0 :(得分:2)

这是您要放在开头而不是结尾的新行

cout << "\nYou are old.";

将它们放在最后应将其修复。这些测试检查确切的输出,很多时候答案似乎都是正确的,但是轻微的输出差异将使测试用例失败。

为什么失败的解释:通过将行尾放在开头,您假设已经有一个输出/行。因此,在初始年龄不小于0的情况下,您没有任何输出/行开始。因此,您最终将在下一行而不是在下一行输出。

答案 1 :(得分:0)

您还需要在第二个功能上加上这个年龄

void Person::amIOld(){
    if(this->age < 13){ //you need to put this->age all age as well
        cout << "\nYou are young.";
    }
    else if (this->age >= 13 && this->age < 18) {//you need to put this->age all age as well
        cout << "\nYou are a teenager.";
    }
    else {
        cout << "\nYou are old.";
    }
}

此外,您还需要将这个年龄> 放在最后一个函数中

void Person::yearPasses(){
    this->age++; //you need to put this->age all age as well
}