Java 将if-else语句中的变量返回主程序
我正在写一个程序,当你输入rgb值时,它会给出cmyk输出 我在Java之前就做过Python,所以我现在是JavaNoob。 显然,if-else语句中的变量无法传递到主程序。在blueJ中,它表示找不到变量cJava 将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 此时,您创建了两个
我做错了什么?在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