小编wch*_*gin的帖子

WaveFront .obj 文件 - “f”命令有什么作用?

我一直在阅读David Brackeen 的《用 Java 开发游戏》。到现在为止我已经明白了书中的所有内容。在 Wavefront 对象文件中,我理解该v命令的作用,但不理解该f命令。例如:

# OBJ - Wavefront object file
# The javagamebook loader only understands these commands:
#   mtllib <filename>    - Load materials from an external .mtl
#                          file.
#   v <x> <y> <z>        - Define a vertex with floating-point
#                          coords (x,y,z).
#   f <v1> <v2> <v3> ... - Define a new face. a face is a flat,
#                          convex polygon with vertices in
#                          counter-clockwise order. Positive
# …
Run Code Online (Sandbox Code Playgroud)

java wavefront

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

哈希算法中真的很奇怪的碰撞:巧合还是错误?

我做了一个哈希算法,它使用MD5进行一些低安全性密钥生成.基本上,它采用字符串的字符并对其索引产品求和,然后在MD5之前采用随机数的模数.在Java中:

BigInteger bi = BigInteger.ZERO;
char[] array = input.toCharArray();
for (int i = 0; i < array.length; i++) {
    bi = bi.add(BigInteger.valueOf(i + 1).multiply(
            BigInteger.valueOf(array[i])));
}
final int moduloOperator = 52665; // random constant
final byte[] moduloResult = bi.remainder(
        BigInteger.valueOf(moduloOperator)).toByteArray();
MessageDigest md;
try {
    md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsae) {
    nsae.printStackTrace();
    return null;
}
md.update(moduloResult);
return new BigInteger(1, md.digest()).toString().substring(0, 7);
Run Code Online (Sandbox Code Playgroud)

我最后有子串,因为它需要易于阅读.

乍一看,它按预期工作:不同的输入提供不同的输出,但结果在运行中是一致的.

但是,在玩一下时,我注意到以下几点:

hash("")        = "1963546"
hash("1963546") = "1322048"
hash("1322048") = "2101764"
hash("2101764") = "3234562"
Run Code Online (Sandbox Code Playgroud)

到目前为止看起来很好 适当随机.但是之后:

hash("3234562") …
Run Code Online (Sandbox Code Playgroud)

java language-agnostic key

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

枚举,类,反射和通用铸造

考虑一下我有一个接口com.mycompany.SomeInterface和一个枚举com.mycompany.SomeEnum implements SomeInterface.我希望SomeInterface在运行时使用Reflection API 获取此类的所有枚举常量 - 作为实例.

目前,我的代码(在类中EnumConstantGetter)是这样的:

Class<?> clazz = EnumConstantGetter.class.getClassLoader().
  loadClass("com.mycompany.SomeEnum");

if (!(SomeInterface.class.isAssignableFrom(clazz)) {
    throw new Exception("the class doesn't implement SomeInterface");
}

if (!(clazz.isEnum()) {
    throw new Exception("not an enum");
} 

Class<? extends Enum<? extends SomeInterface>> castClass =
  (Class<? extends Enum<? extends SomeInterface>>) clazz; // cast #1
ArrayList<SomeInterface> vals = new ArrayList<SomeInterface>();
for (Enum<? extends SomeInterface> enumConstant :
  castClass.getEnumConstants()) {
    vals.add((SomeInterface) enumConstant); // cast #2
}
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎工作,但我在创建时收到编译器警告castClass.

那么我的问题是:代码中注明的两个强制转换(类上的强制转换和常量上的强制转换)是否必须基于我的检查有效? …

java reflection enums casting type-safety

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

我需要实现hashCode()和equals()方法吗?

如果我有一个地图和一个对象作为地图键,是默认的哈希和等于方法吗?

class EventInfo{

    private String name;
    private Map<String, Integer> info
 }
Run Code Online (Sandbox Code Playgroud)

然后我想创建一个地图:

Map<EventInfo, String> map = new HashMap<EventInfo, String>();
Run Code Online (Sandbox Code Playgroud)

我是否必须显式实现hashCode()和equals()?谢谢.

java equals hashcode

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

使用Eclipse创建一个新的JUnit测试用例

我有一个关于使用Eclipse为现有Java应用程序编写额外的JUnit测试用例的问题.

有一个名为"pass"的文件夹,其中包含所有通过测试.我通过右键单击文件夹并选择新建→文件来创建新的通过测试.但是,当我创建JUnit测试用例时,新测试不会显示为"被测试类"下的选项.

如何在pass文件夹中创建此测试用例,使其在"被测试的类中"中显示为一个选项?谢谢!

我尝试过做Project/Clean和Project/Rebuild,但它没有用.

java eclipse testing junit unit-testing

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

在继续之前等待Swing完成更新JProgressBar

我有JFrame一个CardLayout集作为其布局管理.它有两个JPanel子类.一个是面板,WordsLoadingPanel显示文本"Loading words ..."并且有一个JProgressBar.另一个必须实际加载单词.这需要一段时间(对于100个单词大约10-14秒;这是一个非常有选择性的算法),所以我想向用户保证该程序仍在工作.我在面板中使用加载算法激活属性更改firePropertyChange(String, int, int),并且WordsLoadingPanel正在捕获更改 - 我知道这是因为我为此事件添加了一个侦听器来执行println,并且它可以工作.但是,当我更改println为实际更改JProgressBar的值时,它不会执行任何操作.我知道我正在改变这个值,因为如果我在算法开始之前设置了值,它就可以工作,并且它适用于循环的最后一次迭代.我猜这是因为我的算法正在吃掉计算能力,不会让JProgressBar更新.

所以,我的问题是:如何让我的算法等待Swing(这是AWT调度线程?)在继续之前完成更新进度条?我试过了:

  • Thread.yield 在循环的每次迭代中
  • Thread.sleep(1000L) 在循环的每次迭代中,在try/catch中
  • 将所有内容放入循环中 SwingUtilities.invokeLater(Runnable)
  • 只将CPU密集型算法放入 SwingUtilities.invokeLater(Runnable)

编辑:为了进一步支持我的CPU为食算法的假设(听起来像一个孩子的故事...),当我设置JProgressBar不确定的,它只是开始移动的算法结束.

有没有人有什么建议?

谢谢!

java performance swing multithreading

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

自动设置JPanel的最小大小

我有一个子类JPanel,我希望它在编写父框架时pack(),将其最小大小设置为新的首选大小.我尝试过使用a ComponentAdapter,但JPanel默认情况下是可见的; 如果我setVisible(false)在构造函数的开头,JFrame将不再使它可见.如果我使用SwingUtilities's方法获取窗口根,它将返回,null因为它在构造函数中.

有没有办法做到这一点?

java swing jpanel jframe minimum-size

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

Android ICS 4.0操作系统

我是一名新的Android开发人员.

我希望来自机器人开发团队的人能够回答这个问题:如果我有一台带有Android ICS 4.0操作系统的平板电脑,鉴于这个操作系统是基于UNIX的,我可以在其上安装Android Developer Kit和相关的平台+软件包,这样就可以了我可以随着平板电脑旅行一起学习开发吗?

据我所知,Android开发工具包的必备操作系统之一是UNIX - GNU C Library(glibc)2.7或更高版本.ICS 4.0与此兼容吗?

android

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

Xcode tableview字幕

我一直在寻找帮助,但没有运气:(

我想在TableViewCells中设置字幕.每个单元格中的字幕不能相同.我一直在写一些代码:

- (void)viewDidLoad
{
[super viewDidLoad];
 tableData = [[NSArray alloc] initWithObjects:@"cell 1", @"cell 2", nil];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
return [tableData count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath        *)indexPath 
{
UITableViewCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
if (cell == nil)
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle      reuseIdentifier:@"MyCell"];
}
cell.textLabel.text = [tableData objectAtIndex:indexPath.row]; 

cell.detailTextLabel.text = @"Subtitle 1", @"Subtitle 2", nil;

return cell;
}
Run Code Online (Sandbox Code Playgroud)

问题在于 cell.detailTextLabel.text = @"Subtitle 1", @"Subtitle 2", nil;

有人知道如何在每个单元格中设置不同的字幕吗?

祝好运!:)

xcode cell subtitle tableview

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

为什么悬停时边界不会改变?

这是我的代码:

<html>
<head>
<style type="text/css">
   p:hover{border:2px solid red;}
</style>
</head>
<body>
   <p style="border:2px solid green;">This is a paragraph.</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我很困惑:为什么悬停时边框颜色不会改变?

css border hover

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

ArrayList方法不起作用

我正在学习Java,我ArrayList遇到了这个问题:当我尝试使用简单的方法时,编译器会给我错误add.这是代码:

public class ArrayList {

    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("Value A");
        list.add("Value B");
        list.add("Value C");
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法在Javadoc中定义.

它应该非常简单,但我真的不知道我在这里做错了什么.

java arraylist

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

Git合并提交如何知道哪个是"真正的"父级?

据我了解,Git通过追溯当前HEAD通过其父节点到根节点的变化来计算出存储库的当前状态.

合并提交有两个父母,就像C6这里:

合并来自git-scm book的提交示例

[资源]

我理解拥有这样多个父母的优点,理由等.

但是,我不明白你如何追溯历史.如果你的头在master分支的尖端,并且你一次追溯一个提交,Git如何知道那个C6"真正的"父母是C5?它只是它们存储在提交文件中的顺序吗?

还是我误解了什么?这不是Git所做的吗?

git version-control merge

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

我如何等待 Rust `Child` 进程的标准输出已通过管道传输到另一个进程?

我想yes | head -n 1在 Rust 中实现,正确连接管道并检查退出状态:即,我希望能够确定由于yes退出SIGPIPEhead正常完成而退出。管道功能很简单(Rust Playground):

use std::process;

fn a() -> std::io::Result<()> {
    let child_1 = process::Command::new("yes")
        .arg("abracadabra")
        .stdout(process::Stdio::piped())
        .spawn()?;
    let pipe: process::ChildStdout = child_1.stdout.unwrap();
    let child_2 = process::Command::new("head")
        .args(&["-n", "1"])
        .stdin(pipe)
        .stdout(process::Stdio::piped())
        .spawn()?;
    let output = child_2.wait_with_output()?;
    let result = String::from_utf8_lossy(&output.stdout);
    assert_eq!(result, "abracadabra\n");
    println!("Good from 'a'.");
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

但是虽然我们可以child_2在任何时候等待,但pipe移动的声明 child_1,所以不清楚如何等待child_1。如果我们只是在child_1.wait()?之前添加assert_eq!,我们会遇到编译时错误:

error[E0382]: borrow of moved value: `child_1` …
Run Code Online (Sandbox Code Playgroud)

process waitpid rust

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