簡體   English   中英

將變量從if-else語句返回到主程序

[英]Returning a variable from an if-else statement to the main program

我正在編寫一個程序,當您輸入rgb值時會給出cmyk輸出。

我在Java之前做過Python,所以我現在是Java新手。
顯然,if-else語句中的變量無法傳遞到主程序中。 在blueJ中,它說“找不到變量c

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

我究竟做錯了什么?

您定義了所有變量cmyk兩次-一次在if ,一次在else塊中,使它們僅對於那些塊是局部的。

您需要在與rgb相同的級別上定義這些變量,並僅在ifelse塊中分配值。

所以它看起來像這樣:

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);
}

像在rgb一樣,在if之前聲明變量。 原來如此

double c;
double m;
...

對於整個主要方法,它們將是本地的。 現在, if沒有類型,則在內部使用它們(如果輸入類型,則如果使用相同的名稱,則將為此聲明局部變量)。

c = 0;

目前,您制作了c,m,y和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 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

要么

r/255.0

要么

r/(double)255

或同時投放兩者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM