当前位置: 首页 > 知识库问答 >
问题:

"变量可能没有初始化"错误

司徒兴思
2023-03-14

我的编译器不会有它(现在怎么办?我必须完全重写整个应用程序吗?

要查看编译器拒绝的行,请执行系统搜索。出来println(celsius输出“C”);

当试图编译时,编译器告诉我,“变量celsiusOutput可能尚未初始化。”编译器对另外两个输出项中的任何一个都不说同样的话:华氏输出和开尔文输出。

/** 
 * The Temperature class prints the conversion of an inputted temperature value
 * from one of the three temperature scales -- C, F or K -- to all three,
 * unless the input is illegal.
 */

import java.util.Scanner;
public class Temperature
{
    public static void main(String[] args)
    {
        // Declaration of output terms;
        double celsiusOutput;
        double fahrenheitOutput;
        double kelvinOutput;

        // Printing request for input terms from the user + reception of said terms
        Scanner scan = new Scanner(System.in);
        System.out.println("Welcome to the temperature scale converter.");
        System.out.println("Please enter your input temperature scale and degree value in the following format:");
        System.out.println("\"A n∈ℝ\", where A is the first letter of your scale (C, F or K) and n∈ℝ is the degrees.");
        String input = scan.next().toUpperCase(); 
            char inputScale = input.charAt(0);
        double inputDegrees = scan.nextDouble();

        // Declaration of final terms, i.e. the conversion formulae:
        final double C_DEGREES_IN_F = (inputDegrees - 32.00) / 1.80;
            final double C_DEGREES_IN_K = inputDegrees + 273.15;
        final double F_DEGREES_IN_C = (inputDegrees - 32.00) / 1.80;
            final double F_DEGREES_IN_K = (inputDegrees + 459.67) / 1.80;
        final double K_DEGREES_IN_C = inputDegrees - 273.15;
            final double K_DEGREES_IN_F = (inputDegrees - 273.15) * 1.80 + 32.00;

        // Conditional assignment of output terms, as conditioned by the user's input terms
        if(inputScale == 'C')
            celsiusOutput = inputDegrees;
            fahrenheitOutput = F_DEGREES_IN_C;
            kelvinOutput = K_DEGREES_IN_C;
        if(inputScale == 'F')
            celsiusOutput = C_DEGREES_IN_F;
            fahrenheitOutput = inputDegrees;
            kelvinOutput = K_DEGREES_IN_F;
        if(inputScale == 'K')
            celsiusOutput = C_DEGREES_IN_K;
            fahrenheitOutput = F_DEGREES_IN_K;
            kelvinOutput = inputDegrees;

        // Printing of output terms + legality check
        switch(inputScale)
        {
            case 'C':
            case 'F':
            case 'K':
                System.out.println(celsiusOutput + " C");
                System.out.println(fahrenheitOutput + " F");
                System.out.println(kelvinOutput + " K");
                break;
            default:
                System.out.println("Illegal input.");
                break;
        }
    }
}

共有2个答案

甘骞尧
2023-03-14
匿名用户

你犯了两个错误:

>

  • 如果inputScale既不是'C','F'或'K',您的三个变量都没有初始化,因此出现错误。您可以通过使用一个虚拟值初始化它们来解决这个问题(双摄氏度输出=0;)。

    您的错误仅针对celsiusOutput显示,因为当您在if语句后不添加任何大括号时,if只会影响下一个命令;在这种情况下,对于第一个if,则为celsiusOutput=inputdeges。不管发生什么,其他两行都将被执行。只需在希望受if语句影响的行周围添加大括号即可。

  • 濮书
    2023-03-14

    您需要初始化变量change doubledouble celsiusOutput 进入双celsius输出=0 。此外,if语句中还需要大括号才能使算法正常工作。正确的答案是:

    import java.util.Scanner;
    public class Temperature
    {
        public static void main(String[] args)
        {
            // Declaration of output terms;
            double celsiusOutput = 0;
            double fahrenheitOutput = 0;
            double kelvinOutput = 0;
    
            // Printing request for input terms from the user + reception of said terms
            Scanner scan = new Scanner(System.in);
            System.out.println("Welcome to the temperature scale converter.");
            System.out.println("Please enter your input temperature scale and degree value in the following format:");
            System.out.println("\"A n∈ℝ\", where A is the first letter of your scale (C, F or K) and n∈ℝ is the degrees.");
            String input = scan.next().toUpperCase();
            char inputScale = input.charAt(0);
            double inputDegrees = scan.nextDouble();
    
            // Declaration of final terms, i.e. the conversion formulae:
            final double C_DEGREES_IN_F = (inputDegrees - 32.00) / 1.80;
            final double C_DEGREES_IN_K = inputDegrees + 273.15;
            final double F_DEGREES_IN_C = (inputDegrees - 32.00) / 1.80;
            final double F_DEGREES_IN_K = (inputDegrees + 459.67) / 1.80;
            final double K_DEGREES_IN_C = inputDegrees - 273.15;
            final double K_DEGREES_IN_F = (inputDegrees - 273.15) * 1.80 + 32.00;
    
            // Conditional assignment of output terms, as conditioned by the user's input terms
            if(inputScale == 'C') {
                celsiusOutput = inputDegrees;
                fahrenheitOutput = F_DEGREES_IN_C;
                kelvinOutput = K_DEGREES_IN_C;
            }
            if(inputScale == 'F') {
                celsiusOutput = C_DEGREES_IN_F;
                fahrenheitOutput = inputDegrees;
                kelvinOutput = K_DEGREES_IN_F;
            }
            if(inputScale == 'K') {
                celsiusOutput = C_DEGREES_IN_K;
                fahrenheitOutput = F_DEGREES_IN_K;
                kelvinOutput = inputDegrees;
            }
    
            // Printing of output terms + legality check
            switch(inputScale)
            {
                case 'C':
                case 'F':
                case 'K':
                    System.out.println(celsiusOutput + " C");
                    System.out.println(fahrenheitOutput + " F");
                    System.out.println(kelvinOutput + " K");
                    break;
                default:
                    System.out.println("Illegal input.");
                    break;
            }
        }
    }
    

     类似资料:
    • 问题内容: 当我尝试编译时: 我得到这些错误: 在我看来,我在方法的顶部初始化了它们。怎么了 问题答案: 你声明了它们,但没有初始化它们。初始化它们是将它们设置为等于一个值: 因为未初始化变量,但在循环中增加了变量(例如),所以会收到错误消息。 Java原语具有默认值,但如下一位用户所述 当声明为类成员时,它们的默认值为零。局部变量没有默认值

    • 我只是不明白为什么这不起作用: HelloWorld.java:15:错误:变量isOdd可能没有被初始化 如果(isOdd==false){

    • 问题内容: 当我尝试编译时: 我得到这些错误: 在我看来,我在方法的顶部初始化了它们。怎么了 问题答案: 你声明了它们,但没有初始化它们。初始化它们是将它们设置为等于一个值: 因为未初始化变量,但在循环中增加了变量(例如),因此会收到错误消息。 Java原语具有默认值,但如下一位用户所述 当声明为类成员时,它们的默认值为零。局部变量没有默认值

    • 问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事

    • 我不知道这段代码有什么问题,也不知道为什么会出现错误: 变量isPrime可能尚未初始化 这是完整的代码:

    • 我创建了包含构造函数和toString方法的类主管。但是,当我试图打印数组的索引时,出现了一个错误,“变量svArray可能尚未初始化。我该如何解决这个问题?”?