[英]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);
}
}
我究竟做錯了什么?
您定義了所有變量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);
}
像在r
, g
和b
一樣,在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.