我一直在尝试使用以下代码来使用扫描程序获取 char :
import java.util.Scanner;
public class PhoneBill
{
public static void main(String[] args)
{
// Create Scanner
Scanner input = new Scanner (System.in);
//Declare variables
char r, p;
double minutes, nightm, daym, totalcost, account;
//Obtain account number
account = input.nextDouble();
//Determine service
System.out.println("Enter r for regular service or p for premium service: ");
char service = input.next(".").charAt(0);
//Logic for regular service
if (service == r)
{
System.out.println("Enter number of minutes talked: ");
minutes = input.nextDouble();
if (minutes >= 50)
totalcost = (10.00 + (minutes * 0.20));
}
//Display account
System.out.println ("The account number is: " + account);
//Display service type
}
}
但我收到了这个错误:
PhoneBill.java:29: error: variable r might not have been initialized
if (service == r)
^
1 error
问题在哪里以及如何以适当的方式进行?
答案 0 :(得分:0)
在操作中使用变量之前,必须初始化变量(对象和基本类型)。将r和p定义为
char r = 'r', p = 'p'; //
答案 1 :(得分:0)
你声明了一个变量r而你没有给它任何值。然后,您尝试将服务与未初始化的变量进行比较。所以你需要的是在使用它们之前给你的r和p变量赋值。
答案 2 :(得分:0)
您已声明变量r
,并且需要先为其指定值才能使用它:
char r = 'r';
在这种情况下,始终将为常规服务等输入r
(至少在您更改指令消息之前),您只需使用字符文字{{1}而不是有一个变量:
r
但是,为了使您的代码更容易更改,您可能仍然希望使用变量,以便您可以在一个位置更新它并让它自动更新所有相关位置。
在这种情况下,您可以将其声明为:
if (service == 'r') {
// Do something.
}
final char r = 'r';
是可选的,但可以防止您意外更改它。使用较长的变量名来描述它的用途也是一个好主意,例如final
代替regular
。
然后你可以写:
r
答案 3 :(得分:0)
必须在使用本地变量之前对其进行初始化(由Java语言规范强制要求),这意味着必须不存在任何导致使用未初始化变量的执行路径。
要摆脱编译错误,你可以这样做:
char r = 0, p = 0;
虽然我们可以argue是否应该在Java语言中更好地处理这个问题,但是编译器在这里帮了你一个忙:你的逻辑中可能有一个错误,因为你使用的是 初始化 。