Java 算术异常除以零

Java 算术异常除以零,java,Java,我想回答欧拉计划第53题。我采取的是一种蛮力的方法,但在我看来,我的逻辑应该给出正确的答案,即使需要一段时间。那么,在这种情况下,除了效率很低之外,我做错了什么,这使得编译器返回一个算术异常除以零 import java.util.*; public class problem53 { public static int fact(int x) { int total = 0; if(x != 0) { for(int i=(x-1);i>0

我想回答欧拉计划第53题。我采取的是一种蛮力的方法,但在我看来,我的逻辑应该给出正确的答案,即使需要一段时间。那么,在这种情况下,除了效率很低之外,我做错了什么,这使得编译器返回一个算术异常除以零

import java.util.*;

public class problem53 
{
  public static int fact(int x)
  {
    int total = 0;
    if(x != 0)
    {
      for(int i=(x-1);i>0;i--)
      {
        x = x*i;
        total = x;
      }
    }
    if(x==0)
      total = 1;
    return total;
  }

  public static int combo(int y,int z)
  {
      int end = 0;
      if(y==0)
        y=2;
      if(z==0)
        z=1;
      if(y-z != 0)
      {
        end = fact(y)/(fact(z)*(fact(y-z)));
      }
      return end;
 }

public static void main(String[]args)
{
  int answer = 0;
  List<Integer> sure = new ArrayList<Integer>();
  for(int i=20;i<=100;i++)
  {
    for(int j=2;j<i;j++)
    {
      int ferNow = combo(i,j);
      if(ferNow>=1000000)
        sure.add(ferNow);
    }
  }
  answer = sure.size();
  System.out.println(answer);
  }
}
import java.util.*;
公共类问题53
{
公共静态整数事实(整数x)
{
int-total=0;
如果(x!=0)
{
对于(int i=(x-1);i>0;i--)
{
x=x*i;
总数=x;
}
}
如果(x==0)
总数=1;
返回总数;
}
公共静态整数组合(整数y,整数z)
{
int end=0;
如果(y==0)
y=2;
如果(z==0)
z=1;
如果(y-z!=0)
{
结束=事实(y)/(事实(z)*(事实(y-z));
}
返回端;
}
公共静态void main(字符串[]args)
{
int-answer=0;
List sure=new ArrayList();

对于(inti=20;i如果z=1或y-z=1,您将收到一个此错误的提示


因为fact(1)返回0

您的
fact()
已损坏。它将为
fact(1)
返回
0
。好吧,但为什么?方法的哪一部分使t返回0?我在其中添加了很多内容,不用说,如果我可以让该方法不为1返回0,那么我可以将其清理干净。