Java 局部变量gcd可能尚未初始化

Java 局部变量gcd可能尚未初始化,java,Java,我有以下代码,其中变量gcd在gcd()函数中,这显示了错误: 局部变量gcd可能尚未初始化 代码是: import java.util.Scanner; public class GreatestCommonDivisorMethod { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Enter two nu

我有以下代码,其中变量
gcd
在gcd()函数中,这显示了错误:

局部变量gcd可能尚未初始化

代码是:

import java.util.Scanner;

public class GreatestCommonDivisorMethod {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Enter two numbers");
        Scanner input = new Scanner(System.in);
        int num1 = input.nextInt();
        int num2 = input.nextInt();
        System.out.println("the gcd of the " + num1 + " and " + num2 + " is " + gcd(num1,num2));
    }

    public static int gcd(int n1, int n2) {
        int gcd ;
        for (int n = 1; n <= n1 && n <= n2 ; n++) {
            if (n1 % n == 0 && n2 % n == 0)
                gcd = n;
        }
        return gcd;

    }
}
import java.util.Scanner;
公共类最大公约数法{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
System.out.println(“输入两个数字”);
扫描仪输入=新扫描仪(System.in);
int num1=input.nextInt();
int num2=input.nextInt();
System.out.println(“+num1+”和“+num2+”的gcd是”+gcd(num1,num2));
}
公共静态整数gcd(整数n1,整数n2){
int gcd;

对于(int n=1;n本质上,由于Java的工作方式,
gcd
需要在某个时候声明

您的方法声明了
int gcd
,但除了在if语句中之外,从未为其赋值。可能的情况是,if语句从未被输入,因为其中的布尔语句从未计算为true。在这种情况下,可能会出现问题,因为
return gcd;
将执行,即使没有Java不希望发生这种情况,并警告您

您可能需要设置一个默认值,以防它找不到gcd。该值显然是1,因此将其声明为:
int gcd=1;

  • 首先,每个变量在使用前都必须进行初始化
  • 编译器这样做是为了确保在执行或使用程序中的变量时,变量中至少有一个值
  • 避免编译时错误。使用此选项
  • 在您的情况下,如果值n1n2为0,则控件将不会进入for循环,并且不会初始化gcd。返回gcd值时,将出现编译时错误
  • 我还想从java文档中指出这一部分

    局部变量略有不同;编译器从不为未初始化的局部变量指定默认值。如果无法在声明局部变量的位置初始化它,请确保在尝试使用它之前为它指定一个值。访问未初始化的局部变量将导致编译时错误

    您可以在链接中获取完整的文档

    功劳-

    这说明,由于gcd是一个局部变量,因此它没有使用默认值初始化

  • 因此,必须初始化变量

  • 这是你应该做的-

    public static int gcd(int n1, int n2) {
    int gcd = 0;
    for (int n = 1; n <= n1 && n <= n2 ; n++) {
    if (n1 % n == 0 && n2 % n == 0)
         gcd = n;
    }
    return gcd;
    
    }
    
    publicstaticintgcd(intn1,intn2){
    int-gcd=0;
    
    对于(int n=1;n控件可能不会进入for循环,因此您必须初始化它以获取您的答案,但为什么它可能不会进入循环,您能告诉我原因吗?@subhiksprimitives不能为null我完全不同意您的意见。请参阅我编辑的答案@RaphaelRoth。不,说真的,primitives不能为
    null
    。这个原语is local为空。请查看编辑后的答案。您将找到您的答案。@SagarNayak,您似乎不明白什么是
    null
    谢谢您的帮助。