此测试出错:-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;
}
答案 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
}