Java 将if-else语句中的变量返回主程序

Java 将if-else语句中的变量返回主程序,java,Java,我正在写一个程序,当你输入rgb值时,它会给出cmyk输出 我在Java之前就做过Python,所以我现在是JavaNoob。 显然,if-else语句中的变量无法传递到主程序。在blueJ中,它表示找不到变量c 我做错了什么?在if之前声明变量,就像对r、g和b所做的那样。 是的 double c; double m; ... 对于整个主要方法,它们将是局部的。现在,在没有类型的if中使用它们。如果您放置类型,您将为此if声明具有相同名称的新变量local。像这样 c=0 此时,您创建了两个

我正在写一个程序,当你输入rgb值时,它会给出cmyk输出

我在Java之前就做过Python,所以我现在是JavaNoob。 显然,if-else语句中的变量无法传递到主程序。在blueJ中,它表示找不到变量c


我做错了什么?

在if之前声明变量,就像对r、g和b所做的那样。 是的

double c;
double m;
...
对于整个主要方法,它们将是局部的。现在,在没有类型的if中使用它们。如果您放置类型,您将为此if声明具有相同名称的新变量local。像这样

c=0


此时,您创建了两个c、m、y和k的局部集合,每个集合都位于它自己的块的局部

您定义了所有变量c、m、y和k两次—一次在if块中,一次在else块中,使它们仅位于这些块的局部

您需要在与r、g和b相同的级别上定义这些变量,只需在if或else块中赋值

所以看起来是这样的:

public static void main(String [] args)
{
    int r = Integer.parseInt(args[0]);
    int g = Integer.parseInt(args[1]);
    int b = Integer.parseInt(args[2]);

    double c;
    double m;
    double y;
    double k;

    if ((r == 0 && g == 0)&&(g == 0 && b == 0))
    {
        c = 0;
        m = 0;
        y = 0;
        k = 0;
    }
    else         
    {
        int w = (int)(Math.max(r/255,(Math.max(g/255,b/255))));
        c = (double)((w-(r/255))/w);
        m = (double)((w-(g/255))/w);
        y = (double)((w-(b/255))/w);
        k = (double)(1-w);
    }
    System.out.println("cyan    =" + c);
    System.out.println("magenta =" + m);
    System.out.println("yellow  =" + y);
    System.out.println("black   =" + k);
}
public class color_conversion
{
public static void main(String [] args)
{


    double c = 0;
    double m = 0;
    double y = 0;
    double k = 0;
    int r = Integer.parseInt(args[0]);
    int g = Integer.parseInt(args[1]);
    int b = Integer.parseInt(args[2]);
    if (r != 0 || g != 0 || b != 0)        
    {
        int w = (int)(Math.max(r/255,(Math.max(g/255,b/255))));
        c = (double)((w-(r/255))/w);
        m = (double)((w-(g/255))/w);
        y = (double)((w-(b/255))/w);
        k = (double)(1-w);
    }
    System.out.println("cyan    =" + c);
    System.out.println("magenta =" + m);
    System.out.println("yellow  =" + y);
    System.out.println("black   =" + k);
}
}
在if-else块之外声明它们。其他明智的编译器会将它们视为局部变量

        double c;
        double m;
        double y;
        double k;

 if ((r == 0 && g == 0)&&(g == 0 && b == 0))
    {
        c = 0;
        m = 0;
        y = 0;
        k = 0;
    }
    else         
    {
        int w = (int)(Math.max(r/255,(Math.max(g/255,b/255))));
        c = (double)((w-(r/255))/w);
        m = (double)((w-(g/255))/w);
        y = (double)((w-(b/255))/w);
        k = (double)(1-w);
    }

尝试在外部声明变量,如下所示:

public static void main(String [] args)
{
    int r = Integer.parseInt(args[0]);
    int g = Integer.parseInt(args[1]);
    int b = Integer.parseInt(args[2]);

    double c;
    double m;
    double y;
    double k;

    if ((r == 0 && g == 0)&&(g == 0 && b == 0))
    {
        c = 0;
        m = 0;
        y = 0;
        k = 0;
    }
    else         
    {
        int w = (int)(Math.max(r/255,(Math.max(g/255,b/255))));
        c = (double)((w-(r/255))/w);
        m = (double)((w-(g/255))/w);
        y = (double)((w-(b/255))/w);
        k = (double)(1-w);
    }
    System.out.println("cyan    =" + c);
    System.out.println("magenta =" + m);
    System.out.println("yellow  =" + y);
    System.out.println("black   =" + k);
}
public class color_conversion
{
public static void main(String [] args)
{


    double c = 0;
    double m = 0;
    double y = 0;
    double k = 0;
    int r = Integer.parseInt(args[0]);
    int g = Integer.parseInt(args[1]);
    int b = Integer.parseInt(args[2]);
    if (r != 0 || g != 0 || b != 0)        
    {
        int w = (int)(Math.max(r/255,(Math.max(g/255,b/255))));
        c = (double)((w-(r/255))/w);
        m = (double)((w-(g/255))/w);
        y = (double)((w-(b/255))/w);
        k = (double)(1-w);
    }
    System.out.println("cyan    =" + c);
    System.out.println("magenta =" + m);
    System.out.println("yellow  =" + y);
    System.out.println("black   =" + k);
}
}

在Java中,所有变量和对象都有一个作用域,这意味着变量/对象只存在于这个作用域中。在您的示例中,c变量仅存在于if语句中。当if语句中存在流时,GC将重新收集c变量

因此,只需将c、m、k、y变量移到主函数顶部即可。

另一个问题:

您采用整数除法,如“r/255”,大多数情况下,它会给您“0”。 要解决这个问题,您应该将其中一个设置为“double”,如

(double)r/255


也可以同时使用这两种方法。

您要声明:双c=0;在if语句内部。在if else块外部声明它们。在if范围内创建的变量不会提升到父级的范围内,它们仅在父级的范围内可见。也许这有助于我们思考为什么这一点会被否决。以前问过的问题/太基本了吗?我可以理解,这个网站上的基本编程问题得到了很多答案和反对票。这就是为什么?想知道为什么这被否决了,它可能被否决了,因为它是关于存在于许多语言中的基本概念-范围。许多人认为这是缺乏研究,这是向下投票的正当理由将鼠标悬停在向下投票箭头上,您将看到何时应该使用它。if语句中的范围存在漏洞。我想我已修复了它。现在?if语句中的逻辑可以缩短。在单行中c=m=y=k=0@罗伯特贝恩的情况,我应该说。r==0&&g==0&&b==0右。。如果这3个变量都等于0,那么如果为真@robertbain if条件中的逻辑可以缩短为r==0&&g==0&&b==0。对,可能是r==0&&g==0&&b==0,但这不是OP问题的一部分,所以我没有碰它。。。同样,if体可以是c=m=y=k=0;是的,这是我的另一个问题。如何解决此问题?谢谢。它为其中3个值打印NaN。我该如何解决这个问题?
r/(double)255