小编Fro*_*koy的帖子

数组是通过值传递还是通过Java引用传递?

可能重复:
Java是"传递引用"吗?

数组在Java 中不是原始类型,但它们也不是对象,它们是通过值还是通过引用传递的?它取决于数组包含的内容,例如引用或基本类型吗?

java arrays

164
推荐指数
5
解决办法
18万
查看次数

从C++中的空基类继承

我想创建一个名为"Node"的空基类,然后从其中派生出其他类,如"DecisionNode"和"Leaf".这样做是有意义的,这样我就可以利用多态将这些不同类型的节点传递给方法,而不必在编译时知道将传递给方法的内容,但每个派生类不共享任何状态或方法.

我认为实现这个的最好方法是,不在基类中创建额外的纯虚方法,这会增加混乱,这将使构造函数变为纯虚拟.在该类的头文件中,"Node.h"因此我写道:

class Node {
 private:
  virtual Node();
};
Run Code Online (Sandbox Code Playgroud)

在"Node.cpp"我写道:

#include "Node.h"
virtual Node::Node() = 0;
Run Code Online (Sandbox Code Playgroud)

此实现防止Node被另一个类实例化,因为唯一的构造函数是private,并使用纯虚拟说明符来指示该类是抽象的.但是,这会给编译器错误:

Node.h:6:21: error: return type specification for constructor invalid
Node.h:6:21: error: constructors cannot be declared virtual [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我的问题是:有一个简洁的方法来创建一个空的抽象基类?

c++ polymorphism inheritance constructor abstract-class

5
推荐指数
2
解决办法
5865
查看次数

用Java检查内存布局

我正在尝试继承,出于教育目的,我想检查为各种对象和对象中的字段分配的地址.有没有一个工具可以让我看到JVM正在使用的内存以及使用它的内容.

例如,如果我有两个类:

class A { int i,j; int f { ...} }
class B extends A { int c; /* more methods, overriding f and declaring new ones as well */ }
Run Code Online (Sandbox Code Playgroud)

并在对象a和实例中实例化这些类b.

是否有一个工具可用于分析内存使用情况并确切地查看为这些内存分配的内存?

谢谢!

java memory-management

3
推荐指数
2
解决办法
5411
查看次数

在bash中使用管道来缓冲来自串行设备的数据

我有一个看起来像这样的脚本:

while true; do
    read -t10 -d$'\n' input_from_serial_device </dev/ttyS0
    # do some costly processing on the string
done
Run Code Online (Sandbox Code Playgroud)

问题是它将错过串行设备的下一个输入,因为它正在燃烧CPU周期进行昂贵的字符串处理.

我认为我可以通过使用管道解决这个问题,原因是bash将缓冲两个进程之间的输入:

( while true; do
     read -d$'\n' input_from_serial_device </dev/ttyS0
     echo $input_from_serial_device
  done ) | ( while true; do
     read -t10 input_from_first_process
     # costly string processing
  done )
Run Code Online (Sandbox Code Playgroud)

我首先要检查我是否正确理解了管道,这确实会缓冲我预期的两个进程之间的输入.这个想法是否正确?

其次,如果我在第二个进程中找到了我正在寻找的输入,是否有办法立即终止两个进程,而不是退出第二个进程并在退出第一个进程之前等待下一个输入?

最后,我意识到bash不是最好的方法,我现在正在研究一个C程序,但我非常希望将其作为一个中间解决方案.

谢谢!

bash serial-port

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

在Java中打破嵌套的for循环

可能重复:
在Java中突破嵌套循环

我如何使用break和/或continue语句返回到第1,2和3点的while循环的第一行,例如,如伪代码所示?

假设我有一个让人联想到以下内容的场景:

while(condition) {
    // want to return to this point
    for (Integer x : xs) {
        // point 1
        for (Integer y : ys) {
            // point 2
            ...
        }
        ...
    }
    for (Integer a : as) {
        for (Integer b : bs) {
            // point 3
            ...
        }
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

java loops for-loop break while-loop

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

Prolog - 为什么变量不受约束?

我已经定义了一个目标lowerpartition/3如下:

lowerpartition(X,P,Z) :- var(Z),!,lowerpartition(X,P,[]).
lowerpartition([],_,_).
lowerpartition([X|Xs],P,Z) :- X=<P, lowerpartition(Xs,P,[X|Z]).
lowerpartition([X|Xs],P,Z) :- X>P, lowerpartition(Xs,P,Z).
Run Code Online (Sandbox Code Playgroud)

我打电话的时候

lowerpartition([1,2,3,4,5],3,X).
Run Code Online (Sandbox Code Playgroud)

我希望X绑定到列表[3,2,1],但Prolog只返回false.我做错了什么?

list prolog

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

Java - 使用字节索引到数组中

是否可以基于字节索引Java数组?

即类似的东西

array[byte b] = x;
Run Code Online (Sandbox Code Playgroud)

我有一个性能非常关键的应用程序,它从文件中读取b(在上面的代码中),我不希望将此转换为int的开销.实现这一目标的最佳方法是什么?使用这种索引方法而不是int会导致性能下降吗?

非常感谢,

Froskoy.

java arrays byte

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

Java - 用整数和字节进行位移

考虑以下代码(其中byteIndex是一个int):

int bitNumber = b-(8*byteIndex);
bitMask = 0x8>>(byte)bitNumber;
Run Code Online (Sandbox Code Playgroud)

这会产生错误

error: possible loss of precision
Run Code Online (Sandbox Code Playgroud)

编译时(必需字节,找到int).

代码

int bitNumber = b-(8*byteIndex);
bitMask = 0x8>>2;
Run Code Online (Sandbox Code Playgroud)

编译好.

这里有什么问题,如何修复第一个允许按int值移位的例子?

编辑:在评论之后,这是一个更完整的例子:

48) int byteIndex;
49) byte bitMask;
50) int bitNumber;
    // assign value to byteIndex
67) bitNumber = b-(8*byteIndex);
68) bitMask = 0x8>>bitNumber;
Run Code Online (Sandbox Code Playgroud)

并且给出的错误是:

...MyClass.java:68: error: possible loss of precision
    bitMask = 0x8>>bitNumber;
             ^
  required: byte
  found:    int
1 error
Run Code Online (Sandbox Code Playgroud)

java int byte bit-shift

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