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

方法内局部变量的初始化[重复]

党俊健
2023-03-14

考虑到下面的代码,为什么即使优惠券、偏移量和基已在if语句中初始化,编译器仍会在第5行抱怨?由于“percent”变量的默认值为0.0,因此if语句将运行并设置这些值。

public class Discounter {
static double percent; //1
int offset = 10, base= 50; //2
public static double calc(double value) {
    var coupon, offset, base; //3
    if(percent <10){ //4
        coupon = 15;
        offset = 20;
        base = 10;
    }
    return coupon*offset*base*value/100; //5
}
public static void main(String[] args) {
    System.out.println(calc(100));
} }

共有3个答案

强志学
2023-03-14

您的代码已经格式化和重新排列不同。您的一些变量初始化不正确或放错了位置。

查看下面的新代码,然后发表评论,看看您是否仍然需要帮助。我不太确定你在问什么。你能把你的问题缩小范围吗?

package javaQuestionsAndAnswers;

public class Discounter {

public static void main(String[] args) {
    
    System.out.println("StackOverflow Problem and Solution");
    
    System.out.println(calc(100));

} 

public static double calc(double value) {
    
     double percent = 0;
     
     int coupon = 0, offset = 0, base = 0; //3
     
     if(percent <10){ //4
        coupon = 15;
        offset = 20;
            base = 10;
    
      }

    return coupon*offset*base*value/100; //5
}
}
单凯捷
2023-03-14

在Java中,在使用局部变量之前,必须对其进行显式初始化。它们没有作为实例变量提供默认值。

你有两个选择。或者在if语句中移动包含计算的return语句。

public static double calc(double value) {
    int coupon, offset, base; // 3
    if (percent < 10) { // 4
        coupon = 15;
        offset = 20;
        base = 10;
        return coupon * offset * base * value / 100; // 5
    }
    return 0;
}

或者为局部变量提供初始值:

int coupon = 0, offset = 0, base = 0;
轩辕涵亮
2023-03-14

好吧。所以,稍后,我写这段代码

class OtherCode {
    public static void foo() {
      Discounter.percent = 20;
      calc(20);
    }
}

为了解决这个问题,java无意尝试将自己束缚在试图进行深层代码分析以确定事情是否已初始化的困境中。它应用了一个简单、规范的检查列表。他们不会在这里“捕捉”百分比总是低于10的情况(即使百分比并不总是低于10,一旦你在添加新类文件时抛出)。

 类似资料:
  • 我对python相当陌生,我想知道局部变量是如何工作的。让我们从一个简单方法的示例开始: 让我们假设local_dict像一种常量变量一样使用。这里有一个问题:它是在每次调用do_sth()时创建的,还是创建一次并保存在do_sth()内部的某个地方?

  • 问题内容: UI类在View中,导入已完成,但是在最后一个表达式中我得到了错误。 我是Java的入门者,但我不明白为什么我不允许这样使用它。 问题答案: 如果要在Java方法中声明变量/对象,则需要对其进行初始化。 简单来说 在您的情况下,它是一个正在访问方法的对象,因此,如果不初始化它,就像 它会给你一个NULL指针异常。 希望能帮助到你。

  • 问题内容: 嗨,我正在浏览有关内部类的SCJP书,发现了这一说法,类似这样。 方法本地类只能引用已标记的本地变量 在解释中,指定的原因与本地类对象和堆上的局部变量的范围和生存期有关,但我无法理解。我在这里想念任何东西吗? 问题答案: 原因是,在创建方法本地类实例时,编译器实际上会将其引用的所有方法本地变量复制到其中。这就是为什么只能访问变量的原因。甲变量或参考是不变的,所以它停留在同步与其方法本地

  • 本文向大家介绍JavaAgent_OnLoad方法内部的初始化示例,包括了JavaAgent_OnLoad方法内部的初始化示例的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 在我的测试自动化项目中,我将红宝石与水豚、cucumber和硒一起使用。(我已经安装了开发工具包,并且铬正在正常启动) 在站点中查找元素以选择它时,我正在使用方法但在执行cucumber时,它表示以下错误: 我已经删除并重新安装了<code>selenium webdriver 有人能帮助我解决为什么< code>WebDriver在这个上下文中似乎无效吗? 代码示例 (使用标记img查找按钮注销

  • print语句会导致以下编译时错误, 局部变量f可能尚未初始化 如果Java中的原语已经有一个默认值(float=0.0f),为什么我需要定义一个呢? 所以,这是有效的 谢谢大家!