以下代码进入else语句。我无法找出我犯错的地方。 *想要在下面的评论中执行。 * B正在以下评论中执行。
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");
}
}
}
答案 0 :(得分:4)
static
表示它是一个类变量,也就是说,它不属于该类的实例。相反,非静态变量属于类的实例。您从静态方法引用变量n
,因此除非变量也声明为静态,否则它将不起作用。
(显然,由于@MarounMaroun的回复提及,if
本身不起作用)
答案 1 :(得分:1)
您没有初始化n
,因此您不满足if
条件,因为未初始化的static int
变量默认为0
。< / p>
所以:
if ((1<n) && (n<=50))
未评估为true
,因此else
将被执行。
请注意,您无法从非静态方法访问静态变量(请参阅@NilsH答案)。这很有意义..
答案 2 :(得分:1)
首先,在使用static
方法时,您必须引用static
个变量。如果您尝试引用属于某个类的non-static
变量,编译器会抱怨,因为这是错误的。静态变量本身不属于类。
其次,我认为你有一个拼写错误或忘了一些代码。 n
永远不会被设定。因此,因为在static
上下文中它将被初始化为零并且击中其他。我认为你的意思是n
实际上是通过用户输入或其他方式在if
语句之前设置的。如果您保留所有内容static
并实际为n
提供值,那么您的代码应该有效。
例如,您可能需要进行此分配:
n = scanner.nextInt();
。
您的代码在阅读您想要阅读的下一个号码时还有另一个问题,但我会将其留给您解决。
答案 3 :(得分:0)
您是否尝试过static int n
和static String w[]
公开?
IE:
public static int n ;
public static String w[] ;
答案 4 :(得分:0)
您可能想要的是将所有代码移动到非静态方法。然后在你的主要方法中做这样的事情
Solution s = new Solution();
s.myNonStaticMethod();