为什么我的变量在使用不同的 类 时返回 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
,所以不要重新声明它们,问题已解决
局部变量只能在声明它们的函数内部使用,因此它们的值和引用将在函数执行后丢失。
我的问题是当我 运行 代码时,最终 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
,所以不要重新声明它们,问题已解决
局部变量只能在声明它们的函数内部使用,因此它们的值和引用将在函数执行后丢失。