Hackerrank 中的错误比较三元组代码
Errors in Hackerrank compare the triplets code
我在做 hackerrank 三元组和问题时发现了这些错误,但我不知道为什么会出现这些错误。有人可以提供更多关于它的见解吗?如果可能的话 link 一个关于我应该阅读的主题的视频,以便至少让代码正确。
代码
#include <iostream>
using namespace std;
int compareTrip(int a[],int b[])
{
int i=0,result1=0,result2=0;
for(i=0;i<3;i++)
{
if(a[i]>b[i])
result1++;
if(a[i]<b[i])
result2++;
else {
return 0;
}
}
}
int main()
{
int i,a[3],b[3];
for(i=0;i<3;i++)
{
cin>>a[i];
}
for(i=0;i<3;i++)
{
cin>>b[i];
}
compareTrip(a[], b[]);
}
错误
Solution.cpp:30:19: error: expected primary-expression before ‘]’ token
compareTrip(a[], b[]);
^
Solution.cpp:30:24: error: expected primary-expression before ‘]’ token
compareTrip(a[], b[]);
^
Solution.cpp: In function ‘int compareTrip(int*, int*)’:
Solution.cpp:18:1: error: control reaches end of non-void function [-Werror=return-type]
}
^
- 在传递参数时,您应该使用
compareTrip(a,b);
而不是 compareTrip(a[], b[]);
。
- 您的主函数应该 return 一些值,因为它是整数类型
int main()
。
希望对你有帮助。
前两个错误的发生是因为编译器认为您正在尝试重新定义数组 a
和 b
,您已经在 main
的开头初始化了它们.当您调用 compareTrip()
时,您只需将这些数组的名称作为两个参数传入。
错误control reaches end of non-void function
表示第18行函数末尾没有return值。所以你在[=13=中有一组if/else语句] ,但您可能会得到两个整数数组,其中 a
和 b
之间没有匹配项,并且该函数不考虑这种情况。如果这种极端情况发生,我们会发现自己陷入了无限循环,因为函数会离开 for
语句而永远不会离开 return
。因为 return
值是一个 int,所以您希望在 for 循环之外,在最后一个右括号 }
之前包含一个 return statement
,以避免无限循环。
您可以通过 https://www.learncpp.com/,, https://www.sololearn.com/Course/CPlusPlus/, and https://www.codecademy.com/learn/learn-c-plus-plus 等在线课程开始更多地了解 C++ 及其基本语法。我相信前两个是免费的,第三个让您可以免费试用。学习愉快!
static List<Integer> compareTriplets(List<Integer> a, List<Integer> b) {
List<Integer> points=new ArrayList<Integer>(2); ;
int apoint=0,bpoint=0;
for(int i=0;i<3;i++)
{
if(a.get(i)>b.get(i))
{
apoint++;
}
else if(a.get(i)<b.get(i))
{
bpoint++;
}
else
{
}
}
points.add(0,apoint);
points.add(1,bpoint);
return points;
}
我在做 hackerrank 三元组和问题时发现了这些错误,但我不知道为什么会出现这些错误。有人可以提供更多关于它的见解吗?如果可能的话 link 一个关于我应该阅读的主题的视频,以便至少让代码正确。
代码
#include <iostream>
using namespace std;
int compareTrip(int a[],int b[])
{
int i=0,result1=0,result2=0;
for(i=0;i<3;i++)
{
if(a[i]>b[i])
result1++;
if(a[i]<b[i])
result2++;
else {
return 0;
}
}
}
int main()
{
int i,a[3],b[3];
for(i=0;i<3;i++)
{
cin>>a[i];
}
for(i=0;i<3;i++)
{
cin>>b[i];
}
compareTrip(a[], b[]);
}
错误
Solution.cpp:30:19: error: expected primary-expression before ‘]’ token
compareTrip(a[], b[]);
^
Solution.cpp:30:24: error: expected primary-expression before ‘]’ token
compareTrip(a[], b[]);
^
Solution.cpp: In function ‘int compareTrip(int*, int*)’:
Solution.cpp:18:1: error: control reaches end of non-void function [-Werror=return-type]
}
^
- 在传递参数时,您应该使用
compareTrip(a,b);
而不是compareTrip(a[], b[]);
。 - 您的主函数应该 return 一些值,因为它是整数类型
int main()
。 希望对你有帮助。
前两个错误的发生是因为编译器认为您正在尝试重新定义数组 a
和 b
,您已经在 main
的开头初始化了它们.当您调用 compareTrip()
时,您只需将这些数组的名称作为两个参数传入。
错误control reaches end of non-void function
表示第18行函数末尾没有return值。所以你在[=13=中有一组if/else语句] ,但您可能会得到两个整数数组,其中 a
和 b
之间没有匹配项,并且该函数不考虑这种情况。如果这种极端情况发生,我们会发现自己陷入了无限循环,因为函数会离开 for
语句而永远不会离开 return
。因为 return
值是一个 int,所以您希望在 for 循环之外,在最后一个右括号 }
之前包含一个 return statement
,以避免无限循环。
您可以通过 https://www.learncpp.com/,, https://www.sololearn.com/Course/CPlusPlus/, and https://www.codecademy.com/learn/learn-c-plus-plus 等在线课程开始更多地了解 C++ 及其基本语法。我相信前两个是免费的,第三个让您可以免费试用。学习愉快!
static List<Integer> compareTriplets(List<Integer> a, List<Integer> b) {
List<Integer> points=new ArrayList<Integer>(2); ;
int apoint=0,bpoint=0;
for(int i=0;i<3;i++)
{
if(a.get(i)>b.get(i))
{
apoint++;
}
else if(a.get(i)<b.get(i))
{
bpoint++;
}
else
{
}
}
points.add(0,apoint);
points.add(1,bpoint);
return points;
}