相关疑难解决方法(0)

由于传递错误导致Java数组修改自身?

我正在用另一个'array2'实例化一个数组'array1',然后尝试修改'array2',这会改变'array1'.几个小时后,我意识到它可能是一个call-by或pass-by-ref/value错误.有人可以帮我解决这个问题并让我朝着正确的方向前进吗?

    int[] src = {0,4,3,2,1};
    int[] dest = src;

    dest[0] = dest[0] + 2;

    for (int node: dest) {
        System.out.print(node + " ");
    }

    System.out.println("");
    for (int node: src) {
        System.out.print(node + " ");
    }
Run Code Online (Sandbox Code Playgroud)

这会产生:

2 4 3 2 1

2 4 3 2 1

即源数组也被修改.提前致谢.

java arrays

1
推荐指数
1
解决办法
57
查看次数

java - 通过引用模糊调用

我熟悉java中的引用概念,但看到这段代码后我很困惑

public class App 
{
    public static void main( String[] args )
    {
        Test t1 = new Test(1);
        Test t2 = new Test(8);
        App.doSomething(t1, t2);
        System.out.print(t1.a);
        System.out.print(t2.a);
    }
    public static void doSomething(Test t1, Test t2){
        System.out.print(t1.a++);
        System.out.print(t2.a++);
        t1 = new Test(999);
        t2 = new Test(888);
    }
}
Run Code Online (Sandbox Code Playgroud)

打印:

1
8
2
9
Run Code Online (Sandbox Code Playgroud)

为什么主函数中"t1.a"和"t1.b"的值不变为888和999?

java pass-by-reference

1
推荐指数
1
解决办法
114
查看次数

JAVA可变范围

我正在查看一些旧问题进行测试,但我遇到了一个非常简单的问题,但这不是我的预期.

public class Exampractice {
  public static void f(int x, int[] y, int[] z) {
    x = 2;
    y[0] = x;
    z = new int[5];
    z[0] = 555;
  }
  public static void main(String[] args) {
    int x = 111;
    int[] y = {222, 333, 444, 555};
    int[] z = {666, 777, 888, 999};
    f(x, y, z);
    System.out.println(x);
    System.out.println(y[0]);
    System.out.println(z[0]);
  }
}
Run Code Online (Sandbox Code Playgroud)

该问题询问以下代码的结果是什么.我得到以下结果:

111 
2 
666 
Run Code Online (Sandbox Code Playgroud)

我理解为什么x是111,因为局部变量覆盖所有其他变量,y [0] = 2,因为代码说它等于x,这是2,但我迷失了为什么z [0] = 666,因为它已在f中重新排列类.

java

1
推荐指数
1
解决办法
96
查看次数

Java:如何将整数和字符串存储在数组中并在另一个类中检索值?

我有一个模型:fase.java,带有整数和字符串+ getter 和 setter:

public class Fase implements Serializable {
private Integer age;
private String name;
}
Run Code Online (Sandbox Code Playgroud)

我想将整数和字符串存储在数组或数组列表中。我现在用这个:

public String[] getAllValues(){
String[] values = {age.toString(), name};
return values;
Run Code Online (Sandbox Code Playgroud)

然后在 dataServiceImpl.java 中,我使用以下命令检索数据:

user.getFase().getAllValues()[0]; 
Run Code Online (Sandbox Code Playgroud)

并检索年龄。

这是可行的,但我有的不仅仅是年龄和姓名,并且正在考虑是否可以将 Fase.java 中的所有内容放入一个 Array/ArrayList 中,因为它们是 Integer 和 String,然后在 dataServiceImpl.java 中检索它?

Fase.java 中是这样的:ArrayList <Objects> f3Values = new ArrayList <Objects>();

或者Fase [] f3Array = new Fase[34];

然后使用以下命令在 dataServiceImpl.java 中检索它:ArrayList<Fase3.Fase3Array> f3List = new ArrayList<Fase3.Fase3Array>(); 并使用类似:user.f3List[0];?

java arrays oop arraylist object

1
推荐指数
1
解决办法
8572
查看次数

OCJP的误解

我准备参加OCJP考试,我有一个棘手的问题.我不知道为什么正确的答案是下一个:"B.300-300-100-100-100"问题听起来像这样:

1.    class Foo {

2.        private int x;

3.        public Foo(int x) {
4.            this.x = x;
5.        }

6.        public void setX(int x) {
7.            this.x = x;
8.        }

9.        public int getX() {
10.            return x;
11.        }
12.    }

13.    public class Gamma {

14.       static Foo fooBar(Foo foo) {
15.            foo = new Foo(100);
16.            return foo;
17.        }

18.        public static void main(String[] args) {
19.            Foo foo = new Foo(300);
20.            System.out.println(foo.getX() …
Run Code Online (Sandbox Code Playgroud)

java

1
推荐指数
1
解决办法
361
查看次数

将对象和原始数据作为Java中的参数传递有什么区别?

我对传递对象和原始数据作为Java中的参数之间的区别感到有点困惑.我在这里读了一篇文章,解释说当你传递原始数据时,你复制那些数据然后传递它,但是如果传递一个对象,那么你就会传递一个对象引用.我还阅读了这篇讨论,解释说Java中没有传递引用.那么上面两个传递之间的真正区别是什么以及为什么Java以不同方式处理它们?提前致谢.

java parameters primitive

1
推荐指数
1
解决办法
6401
查看次数

改变私人变量

几个月后我开始学习Java课程,并且我正在尝试制作一个简单版的口袋妖怪游戏.到现在为止一切都很顺利,但现在我遇到了麻烦.

我的地图有障碍存储在Array(私有)中的类中,并使用get方法在其他类中使用Array.不知何故,这些其他类在第一个类中更改了Array.

这怎么可能?

java private

1
推荐指数
1
解决办法
1万
查看次数

为什么函数不能改变其参数对象的地址/参考值?

我了解到在Java和C中,您可以分配指针,将指针传递给方法,跟随方法中的指针并更改指向的数据.但是,您无法更改指针指向的位置.

我认为由于它的传递引用功能,我可以在C++中看到不同的行为,但我的代码似乎同意上述声明......

void reassign(string & a);
int main()
{
    string x = "abcd";
    cout <<"x is " << x <<" at " << &x <<endl;    //"x is abcd at 0x7bc7ebd5b720"
    reassign(x);
    cout <<"x is " << x <<" at " << &x <<endl;    //"x is efgh at 0x7bc7ebd5b720"

}

void reassign(string & a)
{
    a = string("efgh");
}
Run Code Online (Sandbox Code Playgroud)

由于"string()"构造一个新字符串,为什么"重新分配"函数不会改变原始字符串的地址?

c++ reference parameter-passing pass-by-reference

1
推荐指数
1
解决办法
717
查看次数

Java通过引用传递与listNode问题

我有一堂课:

class ListNode {
     int val;
     ListNode next;
     ListNode(int x) { val = x; }
}
Run Code Online (Sandbox Code Playgroud)

打印LinkedList的函数是:

public static void printLinkedNode(ListNode l){
        while(l != null){
            System.out.print(l.val+" ");
            l = l.next;
        }
        System.out.println(" ");
    }
Run Code Online (Sandbox Code Playgroud)

在我的主要功能中,我创建了一个名为test的ListNode:

ListNode test = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
Run Code Online (Sandbox Code Playgroud)

如果我做答:

ListNode fast = head, slow = head;
fast = fast.next.next;
printLinkedNode(head); // I get 1->2->3->4
Run Code Online (Sandbox Code Playgroud)

如果我做B:

ListNode fast = head, slow = head;
fast.next = fast.next.next;
printLinkedNode(head); …
Run Code Online (Sandbox Code Playgroud)

java assign

1
推荐指数
1
解决办法
595
查看次数

带有java方法的for循环迭代器

我尝试通过方法完成迭代来执行一个简单的 for 循环。它的返回值没有赋值

    public class DefaultC {

    public static void main(String[] args) {
        int i = 1;
        for(i= 10;i<=50; i=method(i)){
            System.out.println(i);
        }
    }

    static int method(int i){
        return i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

java

1
推荐指数
1
解决办法
100
查看次数