Search code examples
javatimelong-integerbukkit

Why isn't my variable being resolved in Java?


I am getting an error in Eclipse Java. My code is:

if (args[0].equalsIgnoreCase("begin")) {
    long startTime;
    startTime = (System.currentTimeMillis() / 1000);
} else if (args[1].equalsIgnoreCase("stop")) {
    long endTime;
    endTime = (System.currentTimeMillis() / 1000);
} else if (args[1].equalsIgnoreCase("timer")) {
    long currentTime;
    long currentTimeForm;
    currentTime = (System.currentTimeMillis() / 1000);
    currentTimeForm = currentTime - startTime;
}

I get the error startTime cannot be resolved to a variable when I save it. Is it possible that because it is separated into separate if statements, it does not get the variable? I am coding a Bukkit Minecraft plugin.

How do I fix this error?


Solution

  • You must instantiate the variables like so:

            if (args[0].equalsIgnoreCase("begin")) {
                long startTime=0;
                startTime = (System.currentTimeMillis() / 1000);
            } else if (args[1].equalsIgnoreCase("stop")) {
                long endTime=0;
                endTime = (System.currentTimeMillis() / 1000);
                
            } else if (args[1].equalsIgnoreCase("timer")) {
                long currentTime=0;
                long currentTimeForm=0;
                currentTime = (System.currentTimeMillis() / 1000);
                currentTimeForm = currentTime - startTime;
            }
    

    However, since you use the startTime in every case, you can just instantiate it outside of the if statements. You also never defined endTime in some cases, so here is the fully revised code.

            long currentTime=0;
            long endTime=0;
            if (args[0].equalsIgnoreCase("begin")) {
                startTime = (System.currentTimeMillis() / 1000);
            } else if (args[1].equalsIgnoreCase("stop")) {
                endTime = (System.currentTimeMillis() / 1000);
                
            } else if (args[1].equalsIgnoreCase("timer")) {
                
                currentTime = (System.currentTimeMillis() / 1000);
                currentTimeForm = currentTime - startTime;
            }