我正在编写一个程序,当你输入rgb值时会给出cmyk输出。
我在Java之前做过Python,所以我现在是一个java noob
显然,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);
}
}
我做错了什么?
答案 0 :(得分:2)
您定义所有变量c
,m
,y
和k
两次 - 一次在if
,一次在else
块中,只为那些街区制作本地。
您需要在与r
,g
和b
相同的级别定义这些变量,并在if
或else
块中分配值。< / p>
所以它看起来像这样:
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);
}
答案 1 :(得分:1)
在if
之前声明您的变量,就像使用r
,g
和b
一样。
所以它会是
double c;
double m;
...
它们将是整个主要方法的本地。现在在没有类型的if
内使用它们(如果你输入类型,你将为此声明新的变量,如果名称相同。)就像这样
c = 0;
目前你制作了两个本地的c,m,y和k集(每个集合都是它自己的块)
答案 2 :(得分:1)
将它们排除在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);
}
答案 3 :(得分:1)
尝试像这样声明变量:
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);
}
}
答案 4 :(得分:1)
在Java中,所有变量和对象都有范围,这意味着变量/对象仅存在于此范围内。在您的示例中, c 变量仅存在于if语句中。当if语句中存在流时,GC会重新收集 c 变量。
所以,只需将 c,m,k,y 变量移到主函数的顶部即可。
答案 5 :(得分:1)
另一个问题:
你接受整数除法,例如&#39; r / 255&#39;,大部分时间都会给你&#39; 0&#39;。 要解决这个问题,你应该将其中一个投射到&#39; double&#39;,喜欢
(double)r/255
或者
r/255.0
或者
r/(double)255
或投两者。