由于静态变量导致java中的编程错误

时间:2013-04-29 17:33:35

标签: java variables if-statement for-loop static

以下代码进入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");
          }    
       }
    }

5 个答案:

答案 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();

在if语句之前

您的代码在阅读您想要阅读的下一个号码时还有另一个问题,但我会将其留给您解决。

答案 3 :(得分:0)

您是否尝试过static int nstatic String w[]公开?

IE:

public static int n ;
public static String w[] ; 

答案 4 :(得分:0)

您可能想要的是将所有代码移动到非静态方法。然后在你的主要方法中做这样的事情

Solution s = new Solution();
s.myNonStaticMethod();