求解:Java 运行代码的时候求不了阶乘

各位各位帮忙瞅瞅,这个该咋整

img

这个是我的代码,出现的问题是:运行代码的时候没办法求阶乘,只能输入,不能运算

img


这个是题目

求帮忙解答 靴靴啦~

 public static void main(String[] args) {
        for (int i = 2; i <= 10; i += 2) {
            if (i != 8) {
                System.out.println(i + "阶乘为" + jiec(i));
            }
        }
    }

    public static int jiec(int i) {
        int n = 1;
        for (int j = 1; j <= i; j++) {
            n *= j;
        }
        return n;
    }

img

应该把输入放入主程序,函数里n接收你输入的值,而不必再获取。
而且你别修改函数名,人家是fact你不要改成jiec
你可以这么写
int fact(int n)
{
if (n == 1) return 1;
return fact(n - 1) * n;
}

  • 你可以参考下这篇文章:第二周课前预习(Java异常类与常用类)
  • 除此之外, 这篇博客: 用JAVA实现魔法优惠券中的 思路:第一首先两个顺序表,分别正序,和倒序,正序的先乘小的,也就是最前面的全部是负数的情况,然后倒叙,最大的都是正数的情况。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Scanner;

    public class Main {

        public static void main(String[] args) throws IOException {
            BufferedReader sr = new BufferedReader(new InputStreamReader(System.in));
            String s[] = sr.readLine().split(" ");
            int n = Integer.parseInt(s[0]);//优惠券的个数
            int pnum [] = new int[n];  //存优惠券的面值
            ArrayList<Integer> list = new ArrayList(); //两个列表
            ArrayList<Integer> list1 = new ArrayList();
            for(int i=0;i<n;i++) {
                list.add(Integer.parseInt(s[i+1])); //存放优惠券
            }
            String ss[] = sr.readLine().split(" ");
            int m = Integer.parseInt(ss[0]); //商品的个数
            int mnum[] = new int[m]; // 商品的的整数价值
            for(int i=0;i<m;i++) {
                 list1.add(Integer.parseInt(ss[i+1]));
            }
            int sum=0;
            Collections.sort(list); //开始正序
            Collections.sort(list1);
            for(int i=0;i<n;i++) {
                if((list.get(i)<0&&list1.get(i)<0)) { //都小于0
                    sum=sum+(list.get(i)*list1.get(i));
                }else{
                    break;
                }
            }
            Collections.reverse(list);//倒叙
            Collections.reverse(list1);
            int x=m>n? n:m; //判断一下那个更多
            for(int i=0;i<x;i++) {
                if((list.get(i)>0&&list1.get(i)>0)) {  //都大于零的
                    sum=sum+(list.get(i)*list1.get(i));
                }
            }
            System.out.println(sum);
        }
    }
     

    注意:最后一个内存超限,我把顺序表改成数组,还是同样内存超限