为什么我的变量在使用不同的 类 时返回 null 和/或 0?

Why are my variables returning null and or 0 when using different classes?

我的问题是当我 运行 代码时,最终 print 语句访问的变量将它们作为 null 和/或 0 返回。

这是我的代码。
SammysContrusct 程序包 7;

import java.util.Scanner;
public class SammysContract {
Scanner userInput = new Scanner(System.in); 
static  String  contractID,rental;

static  int     minutes,hours;

static  double  totalCost;

public void printWelcome()
{       
    System.out.println("Welcome back to Sammy's Rentals! Now introducing new prices and contracts!");   
}

public String inputContract()
{
    System.out.print("Please enter your contract ID: ");
    String contractID = userInput.nextLine();       
    return contractID;      
}

public String rentalItem()
{       
    System.out.print("What would you like to rent? ");
    String rentalItem = userInput.nextLine();       
    return rentalItem;      
}

public int hourID()
{       
    System.out.print("How many hours would you like to rent it for? ");
    int hours = userInput.nextInt();        
    return hours;       
}

public int minuteID()
{       
    System.out.print("How many minutes would you like to rent it for? ");
    int minutes = userInput.nextInt();      
    return minutes;     
}

public double calculateRate()
{       
    if (hours < 3)
    {           
        totalCost = hours * 35; 

    }
    else if (hours >= 3 | hours <=5)
    {

        totalCost = hours * 30;

    }
    else if (hours >= 5 | hours <=7)
    {

        totalCost = hours * 25;

    }
    else if (hours > 7)
    {           
        totalCost = hours * 20;         
    }
    else
    {           
        System.out.print("Please enter a valid number.");           
    }

    return totalCost;       
}

public double calculateCost()
{       
    totalCost = hours + minutes;
    System.out.printf("The contract ID %s has specified %s for %d hours and %d minutes will equate to %.2f", contractID, rental, hours, minutes, totalCost);

    return totalCost;       
}   

}

SammysRentalsV2 程序包 7;

//主要方法~驱动Class

public class SammysRentalsV2 {

public static void main(String[] args)
{

    SammysContract contracts = new SammysContract();

    contracts.printWelcome();
    contracts.inputContract();
    contracts.rentalItem();
    contracts.hourID();
    contracts.minuteID();
    contracts.calculateCost();      
}   

}

因为您在函数中将变量重新声明为局部变量

public String inputContract()
{

    System.out.print("Please enter your contract ID: ");
    String contractID = userInput.nextLine(); // wrong one , local variable  
    contractID = userInput.nextLine(); // should be this 
    return contractID;
} 

字符串是对象,因此默认值为 null,因为 static/initialization,默认情况下 static int 初始化为 0,所以不要重新声明它们,问题已解决

局部变量只能在声明它们的函数内部使用,因此它们的值和引用将在函数执行后丢失。