【问题标题】:I keep getting an error, saying that D1D has not been defined?我一直收到一个错误,说 D1D 尚未定义?
【发布时间】:2021-01-29 23:21:51
【问题描述】:

我正在制作一个星球探索文字游戏,你可以从 5 个不同的星球中进行选择,每个星球都比它上面的那个更难,但也更足智多谋。我有 Int 变量:“D1D”,作为危险值,它是随机的。我有一个死亡屏幕的东西,如果 D1D = 1 就会激活,但它一直说它找不到 D1D? (我正在使用 JDoodle)

import java.lang.Math;
import java.util.Scanner;
public class PlanetExplorer {
    public static void main(String[] args) {
        //Planets:
        System.out.println("Explorable Planets: ");
        System.out.println(" ");
        System.out.println("Mars: ");
        System.out.println("Resorces: 50 ");
        System.out.println("Danger: 10%");
        System.out.println(" ");
        System.out.println("Jupiter: ");
        System.out.println("Resorces: 75 ");
        System.out.println("Danger: 50%");
        System.out.println(" ");
        System.out.println("Titan: ");
        System.out.println("Resorces: 50 ");
        System.out.println("Danger: 30%");
        System.out.println(" ");
        System.out.println("Uranus: ");
        System.out.println("Resorces: 100 ");
        System.out.println("Danger: 60%");
        System.out.println(" ");
        System.out.println("Neptune: ");
        System.out.println("Resorces: 150 ");
        System.out.println("Danger: 75%");
        //Detecting the planet
        Scanner Planet1 = new Scanner(System.in);
        String P1 = Planet1.next();
        // D_R = Day (1-5) Resources
        // D_D = Day (1-5) Danger
        //If Mars:
        if ((P1.equals("Mars"))) {
            int min = 1;
            int max = 90;
            int range = max - min + 1;
            int  D1R = 50;
            int D1D = (int)(Math.random() * range) + min;
            
            // If Jupier
        }
        if ((P1.equals("Jupiter"))) {
            int min = 1;
            int max = 50;
            int range = max - min + 1;
            int  D1R = 100;
            int D1D = (int)(Math.random() * range) + min;
            
            //If Titan
        }
        if ((P1.equals("Titan"))) {
            int min = 1;
            int max = 70;
            int range = max - min + 1;
            int  D1R = 50;
            int D1D = (int)(Math.random() * range) + min;
            
            //If Uranus
        }
        if ((P1.equals("Uranus"))) {
            int min = 1;
            int max = 40;
            int range = max - min + 1;
            int  D1R = 60;
            int D1D = (int)(Math.random() * range) + min;
            
            //If Neptune
        }
        if ((P1.equals("Neptune"))) {
            int min = 1;
            int max = 25;
            int range = max - min + 1;
            int  D1R = 150;
            int D1D = (int)(Math.random() * range) + min;
        }
         //Here \|/
        if (D1D = 1) {
            int Mmin = 1;
            int Mmax = 3;
            int Mrange = Mmax - Mmin + 1;
            int Message = (int)(Math.random() * Mrange) + Mmin;
            if (Message == 1) {
            System.out.println("You Died!");
            System.out.println("Better Luck Next Time!");
            }
            else {
                if (Message == 2) {
                    System.out.println("Failure!");
                }
                else {
                    if (Message == 3) {
                        System.out.println("You Died!");
                        System.out.println("Replay?");
                    }
                }
            }
        }





    }
}

【问题讨论】:

  • 首先if (D1D = 1)是不正确的检查,应该是if (D1D == 1)。其次,您在所有这些不同的 if 子句中定义整数(例如 int D1D)。这意味着,已定义变量的范围仅限于 if 子句的范围。因此,一旦超出 if 子句,您就无法访问变量,因为它们超出了范围。解决方案是在开始时定义变量,在 ifs 之外,稍后再初始化它们。
  • 旁注:变量名应以小写开头并具有描述性。
  • 但是,一旦定义了整数,我将如何编辑它们?

标签: java variables text integer


【解决方案1】:

您在本地声明变量(每个 if 块中的新变量)。 在 if 块之后,变量又消失了。

你应该在之前声明变量:

public static void main(String[] args) {
    int min, max, range, Message, D1R, D1D;

并且唯一在 if 块中为它们赋值:

    if ((P1.equals("Neptune"))) {
        min = 1;
        max = 25;
        range = max - min + 1;
        D1R = 150;
        D1D = (int)(Math.random() * range) + min;

由于变量名不一致,编译时会遇到更多问题,但我希望这会对你有所帮助。

【讨论】:

  • 它正在工作,但现在它说“变量 D1D 可能尚未初始化”
  • @Yeetus 是的,因为可能会出现您从未初始化它的情况(例如,如果输入不等于任何提供的检查)。在这种情况下,在使用变量之前,您可能必须检查它是否已被初始化,或者您事先使用一些您可能认为合适的默认值对其进行初始化。
  • 我修好了 :)。我所要做的就是在定义之后添加:D1D = 0;,在开始时。
猜你喜欢
  • 2016-05-09
  • 2020-01-17
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2018-04-14
  • 2012-09-30
  • 2019-05-25
  • 2015-03-16
相关资源
最近更新 更多