Java 扫描字符并在特定条件下使用它
我一直在尝试以下代码,以便使用Scanner获取字符:Java 扫描字符并在特定条件下使用它,java,if-statement,char,Java,If Statement,Char,我一直在尝试以下代码,以便使用Scanner获取字符: import java.util.Scanner; public class PhoneBill { public static void main(String[] args) { // Create Scanner Scanner input = new Scanner (System.in); //Decla
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
问题在哪里?如何以正确的方式解决问题?在操作中使用变量之前,必须初始化变量(对象和基元类型)。将r和p定义为
char r = 'r', p = 'p'; //
您声明了一个变量r,但没有给它任何值。然后尝试将服务与未初始化的变量进行比较。因此,您需要的是在使用r和p变量之前为它们赋值。您已经声明了一个变量
r
,并且在使用它之前需要为它赋值:
char r = 'r';
在这种情况下,如果您总是为常规服务等输入r
(至少在您更改指令消息之前),您可以简单地使用字符literalr
,而不使用变量:
if (service == 'r') {
// Do something.
}
但是,为了使代码更易于更改,您可能仍然希望使用变量,以便可以在一个位置更新它,并让它自动更新所有相关位置
在这种情况下,您可以将其声明为:
final char r = 'r';
final
是可选的,但可以防止您意外更改它。使用较长的变量名来描述它的用途也是一个好主意,例如使用regular
而不是r
然后你可以写:
System.out.println("Enter " + regular + " for regular service...");
char service = /* ... Whatever ... */ ;
if (service == regular) {
// ... Whatever.
}
局部变量必须在使用之前进行初始化(由Java语言规范强制),这意味着不存在任何会导致使用未初始化变量的执行路径 要消除编译错误,可以执行以下操作:
char r = 0, p = 0;
虽然我们可以确定是否应该在Java语言中更好地处理这个问题,但编译器在这里帮了你一个忙:你的逻辑可能有一个错误,因为你使用的变量没有在任何地方初始化。你是否尝试过给
r
赋值?e、 g.r='r'
。正如错误消息所说,您还没有这样做,您需要这样做,然后才能引用它。甚至,您也可以简单地使用if(service=='r')
。也许您可以扩展您的答案,来解释OP为什么需要这样做?