在编写此程序时,我试过很多例子,结果都是正确的,但是提交上去就是错的。用类编程是为了练习课上所学成果,请各位帮我看看问题在哪,以下是题目以及我的代码。谢谢!
#include<iostream>
using namespace std;
class fraction {
int p, fenm = 1, fenz = 0; int a[10][2];
public:
void setgroup(int m, int a[][2]);
void output();
};
void fraction::setgroup(int m, int c[][2])
{
int i;
p = m;
for (i = 0; i < p; i++) { a[i][0] = c[i][0]; a[i][1] = c[i][1]; }
}
void fraction::output()
{
int i, j, temp;
for (i = 0; i < p; i++)
{
fenm *= a[i][1];
for (j = 0; j < p; j++) if (i != j) a[i][0] *= a[j][1];
fenz += a[i][0];
}
if (fenm > fenz) temp = fenm; else temp = fenz;
for (i = 2; i < temp; i++)
{
if (fenz % i == 0 && fenm % i == 0) {
fenz /= i; fenm /= i;
}
}
if (fenm == 1) cout << fenz;
else cout << fenz << "/" << fenm;
}
int main()
{
int n, b[10][2], i; char str;
cin >> n;
for (i = 0; i < n; i++) cin >> b[i][0] >> str >> b[i][1];
fraction fen;
fen.setgroup(n, b);
fen.output();
return 0;
}
下面流中的map和forEach函数式接口方法
通俗来讲,map其实就是类型转换的作用,
我只是测试所以还是返回的数组,forEach我用作输出控制台
int[] ints ={1,2,3};
Arrays.stream(ints).map(arr->{
int i=0; i++;
System.out.println(i+"次");
return arr;}).forEach(System.out::println);
下面是执行结果
//执行结果
1次
1
1次
2
1次
3
可以看出其实Stream底层是多线程运行的,有多少数据需要处理就创建多少个线程,而且是并发的,当某线程运行完成,会进入等待状态,等待它线程执行完成,然后以正确的顺序得到结果,之间是没有任何关系的,各运行各自的,但是数据是安全的,至于是不是上了锁,怎么实现的 我就没有没有时间研究了
通过Stream.of方式测试
Stream.of(1,2,3).map(arr->{
int i=0; i++;
System.out.println(i+"次");
return arr;}).forEach(System.out::println);