扫描char并在某种情况下使用它

时间:2015-09-17 20:48:18

标签: java if-statement char

我一直在尝试使用以下代码来使用扫描程序获取 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

问题在哪里以及如何以适当的方式进行?

4 个答案:

答案 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语言中更好地处理这个问题,但是编译器在这里帮了你一个忙:你的逻辑中可能有一个错误,因为你使用的是 初始化