1

当我创建一个 LinkedList 并插入一个新元素时,每次都会插入新元素,但是当我将元素出列时,我只会插入最后一个元素。我的代码在 JAVA 中是这样的。

import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
    public static void main(String[] args) throws IOException {
        int i,j,k,l,m,n,t;
        LinkedList q = new LinkedList();
        arc c = new arc();
        c.start = 1;
        c.end  =1 ;
        q.add(c);

        arc d = new arc();
        d.start = 2;
        d.end = 2;
        q.add(d);

        arc a1 = (arc) q.get(0);
        arc a2 = (arc) q.get(1);
        System.out.println(a1.start);
        System.out.println(a2.start);
    }
    public static class arc
    {
        public static int start;
        public static int end;
    }
}

所需的输出是 1 和 2,但我得到 2 和 2。有人可以帮我解决这个问题。谢谢你。

4

5 回答 5

3

因为您在 arc 中设置静态变量。静态变量是类变量,而不是实例变量。所以 arc 的所有实例都会为类变量提供相同的值。

尝试这个:

public static class arc
    {
        public int start;
        public int end;
    }

实际上,相同的元素没有被插入到列表中,两个不同的元素(实例)被插入到列表中,但是您正在从两个实例中打印类变量值。

于 2013-10-15T10:24:21.187 回答
1

arc 类中的字段是静态的。我会开始使用一个好的 IDE,比如 Eclipse,这样你就会被警告不要出现这样的错误。此外,您的代码还有很多需要改进的地方。例如,为什么要使用静态弧类?看起来您不打算从外部类外部静态使用此类。您还应该使用泛型并将 arc 类的名称大写。

于 2013-10-15T10:23:57.917 回答
0

看看你的代码:

public static class arc
{
    public static int start;
    public static int end;
}

您的开始和结束变量是静态的,因此任何弧对象只有一个开始和结束变量。

只需删除静态修饰符,它应该可以工作。

于 2013-10-15T10:27:07.513 回答
0

从 arc 类的 start 和 end 定义中删除 static,否则 start 和 end 将是类级别的变量。

指静态和非静态的区别

于 2013-10-15T10:24:15.430 回答
0

您正在使用静态变量作为开始和结束。将两个类分成两个源文件并删除静态:

public class Lala {
    public static void main(String[] args) throws IOException {
        int i, j, k, l, m, n, t;
        LinkedList q = new LinkedList();
        arc c = new arc();
        c.start = 1;
        c.end = 1;
        q.add(c);

        arc d = new arc();
        d.start = 2;
        d.end = 2;
        q.add(d);

        arc a1 = (arc) q.get(0);
        arc a2 = (arc) q.get(1);
        System.out.println(a1.start);
        System.out.println(a2.start);
    }

}

arc.java:

public class arc
    {
        public int start;
        public int end;
    }
于 2013-10-15T10:29:29.767 回答