静态变量导致java中的编程错误
下面的代码将进入else语句。我无法找出我在哪里犯的错误。 *A希望在下面的注释中执行。 *B在下面的注释中执行静态变量导致java中的编程错误,java,variables,if-statement,for-loop,static,Java,Variables,If Statement,For Loop,Static,下面的代码将进入else语句。我无法找出我在哪里犯的错误。 *A希望在下面的注释中执行。 *B在下面的注释中执行 package com.java; import java.util.Scanner; public class Solution { static int n; static String w[]; public static void main(String[] args) {
package com.java;
import java.util.Scanner;
public class Solution
{
static int n;
static String w[];
public static void main(String[] args)
{
System.out.println("enter no of string between 1 to 50");
Scanner scanner = new Scanner(System.in);
//* A
if ((1<n) && (n<=50))
{
n = scanner.nextInt();
System.out.println("enter " +n+ "strings between 1 to 2000 length");
for (int i=0; i<n; i++)
{
w[i]= scanner.next();
if ((1<w[i].length()) && (w[i].length()<2000))
{
System.out.println("ok");
}
}
System.out.println(w);
}
// *B
else
{
System.out.println("coming due to static");
}
}
}
package com.java;
导入java.util.Scanner;
公共类解决方案
{
静态int n;
静态字符串w[];
公共静态void main(字符串[]args)
{
System.out.println(“输入1到50之间的字符串编号”);
扫描仪=新的扫描仪(System.in);
//*A
if((1您没有初始化n
,因此您不满足if
条件,因为未初始化的静态int
变量默认为0
因此:
if((1static
表示它是一个类变量,也就是说,它不属于该类的实例。相反,非静态变量属于该类的实例。您从静态方法引用变量n
,因此,除非该变量也声明为static,否则它将不起作用
(显然,if
本身无法工作,因为@MarounMaroun的回复提到了这一点)您是否尝试过将静态int n
和静态字符串w[]
公开
即:
您可能想要的是将所有代码移动到一个非静态方法中,然后在主方法中执行类似的操作
Solution s = new Solution();
s.myNonStaticMethod();
首先,在使用静态
方法时,必须引用静态
变量。如果尝试引用属于类的非静态
变量,编译器会抱怨,因为这是错误的。静态变量本身不属于类
第二,我认为您有输入错误或忘记了一些代码。n
从来没有设置过。因此,因为在静态
上下文中,它将被初始化为零并点击else。我认为您的意思是通过用户输入或其他方式将n
实际设置在if
语句之前。如果您保留所有内容static
并实际为n
提供一个值,那么您的代码应该可以工作
例如,您可能需要执行以下任务:
n=scanner.nextInt();
在if语句之前
在读取下一个您想读取的数字时,您的代码还有一个问题,但我将留给您来解决。正确缩进代码将非常有助于理解“案例1”和“案例2”的含义。根据您编写的代码,n将始终为0,因为它是静态的,并且您永远不会更改其值我最讨厌的事情是匿名的反对者不能解释他们的反对票我们应该如何从错误中吸取教训?你错过了他错过了n=scanner.nextInt()的电话;在if语句之前,rest是正确的。我不读大脑。我写了他的代码不工作的原因,有一百万种方法可以解决这个问题。很明显,不需要读大脑。看看我为他重新格式化的代码“你的代码在读下一个你想读的数字时还有另一个问题,但我会留给你去解决。”-这是你回答的一部分,将其应用到你的评论中,你遗漏了许多事实;)
Solution s = new Solution();
s.myNonStaticMethod();