-3

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

5 回答 5

4

static表示它是类变量,即不属于该类的实例。相反,一个非静态变量属于该类的一个实例。您n从静态方法引用变量,因此,除非变量也被声明为静态,否则它将不起作用。

(显然,if由于@MarounMaroun 的回复提到,它本身不起作用)

于 2013-04-29T17:36:46.793 回答
1

You didn't initialize n, so you're not satisfying the if condition, since uninitialized static int variables are 0 by default.

So:

if ((1<n) && (n<=50)) is not evaluated to true, so else will be executed.

Note that you can't access static variable from non-static method (See @NilsH answer). And that's make a lot of sense..

于 2013-04-29T17:35:17.017 回答
1

首先,在使用static方法时,您必须引用static变量。如果你试图引用一个non-static属于某个类的变量,编译器会报错,因为那是错误的。静态变量本身不属于一个类。

其次,我认为您有错字或忘记了一些代码。n永远不会设置 - 永远。因此,由于在static上下文中它将被零初始化并点击 else。我认为您的意思是通过用户输入或其他方式n在语句之前实际设置。if如果您保留所有内容static并实际为 提供一个值n,那么您的代码应该可以工作。

例如,您可能需要进行此分配:

n = scanner.nextInt();

在 if 语句之前。

您的代码在读取您要读取的下一个数字时还有另一个问题,但我将把它留给您解决。

于 2013-04-29T17:49:13.170 回答
0

你试过制作static int nstatic String w[]公开吗?

IE:

public static int n ;
public static String w[] ; 
于 2013-04-29T17:38:17.650 回答
0

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

Solution s = new Solution();
s.myNonStaticMethod();
于 2013-04-29T17:38:23.983 回答