【问题标题】:programming error in java due to static variable由于静态变量,java中的编程错误
【发布时间】:2013-04-29 17:33:34
【问题描述】:

以下代码进入 else 语句。我无法找出我犯错的地方。 *A 想在下面的 cmets 中执行。 *B 在下面的 cmets 中执行。

    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");
          }    
       }
    }

【问题讨论】:

  • 正确缩进你的代码可以很好地理解“case 1”和“case 2”的含义。
  • 根据您所写的内容,n 将始终为 0,因为它是静态的,您永远不会更改它的值。

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


【解决方案1】:

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

(很明显,if 本身不起作用,因为@MarounMaroun 的回复提到了)

【讨论】:

    【解决方案2】:

    您没有初始化n,因此您不满足if 条件,因为未初始化的static int 变量默认为0

    所以:

    if ((1&lt;n) &amp;&amp; (n&lt;=50)) 不会被评估为true,所以else 将被执行。

    请注意,您无法非静态方法访问静态变量(请参阅@NilsH 答案)。这很有意义..

    【讨论】:

    • 我在这里最讨厌的事情之一是匿名的反对者,他们不解释他们的反对意见。我们应该如何从这种错误中吸取教训?
    • 你错过了他错过了 n =scanner.nextInt(); 的电话的事实在 if 语句之前,rest 是正确的。
    • 我不会读心术。我写了为什么他的代码不起作用,有一百万种方法可以解决这个问题。
    • 很明显,不需要读心术..看看我为他重新格式化的代码
    • "您的代码在读取您要读取的下一个数字时还有另一个问题,但我会留给您解决。" - 这是您的一部分回答,将此应用于您的评论,您错过了许多事实;)
    【解决方案3】:

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

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

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

    n = scanner.nextInt();

    在 if 语句之前。

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

    【讨论】:

      【解决方案4】:

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

      IE:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-12
          • 2016-02-07
          相关资源
          最近更新 更多