我一直在阅读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) 我做了一个哈希算法,它使用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) 考虑一下我有一个接口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.
那么我的问题是:代码中注明的两个强制转换(类上的强制转换和常量上的强制转换)是否必须基于我的检查有效? …
如果我有一个地图和一个对象作为地图键,是默认的哈希和等于方法吗?
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()?谢谢.
我有一个关于使用Eclipse为现有Java应用程序编写额外的JUnit测试用例的问题.
有一个名为"pass"的文件夹,其中包含所有通过测试.我通过右键单击文件夹并选择新建→文件来创建新的通过测试.但是,当我创建JUnit测试用例时,新测试不会显示为"被测试类"下的选项.
如何在pass文件夹中创建此测试用例,使其在"被测试的类中"中显示为一个选项?谢谢!
我尝试过做Project/Clean和Project/Rebuild,但它没有用.
我有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)SwingUtilities.invokeLater(Runnable)编辑:为了进一步支持我的CPU为食算法的假设(听起来像一个孩子的故事...),当我设置JProgressBar不确定的,它只是开始移动后的算法结束.
有没有人有什么建议?
谢谢!
我有一个子类JPanel,我希望它在编写父框架时pack(),将其最小大小设置为新的首选大小.我尝试过使用a ComponentAdapter,但JPanel默认情况下是可见的; 如果我setVisible(false)在构造函数的开头,JFrame将不再使它可见.如果我使用SwingUtilities's方法获取窗口根,它将返回,null因为它在构造函数中.
有没有办法做到这一点?
我是一名新的Android开发人员.
我希望来自机器人开发团队的人能够回答这个问题:如果我有一台带有Android ICS 4.0操作系统的平板电脑,鉴于这个操作系统是基于UNIX的,我可以在其上安装Android Developer Kit和相关的平台+软件包,这样就可以了我可以随着平板电脑旅行一起学习开发吗?
据我所知,Android开发工具包的必备操作系统之一是UNIX - GNU C Library(glibc)2.7或更高版本.ICS 4.0与此兼容吗?
我一直在寻找帮助,但没有运气:(
我想在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;
有人知道如何在每个单元格中设置不同的字幕吗?
祝好运!:)
这是我的代码:
<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)
我很困惑:为什么悬停时边框颜色不会改变?
我正在学习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中定义.
它应该非常简单,但我真的不知道我在这里做错了什么.
据我了解,Git通过追溯当前HEAD通过其父节点到根节点的变化来计算出存储库的当前状态.
合并提交有两个父母,就像C6这里:

我理解拥有这样多个父母的优点,理由等.
但是,我不明白你如何追溯历史.如果你的头在master分支的尖端,并且你一次追溯一个提交,Git如何知道那个C6"真正的"父母是C5?它只是它们存储在提交文件中的顺序吗?
还是我误解了什么?这不是Git所做的吗?
我想yes | head -n 1在 Rust 中实现,正确连接管道并检查退出状态:即,我希望能够确定由于yes退出SIGPIPE和head正常完成而退出。管道功能很简单(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) java ×8
swing ×2
android ×1
arraylist ×1
border ×1
casting ×1
cell ×1
css ×1
eclipse ×1
enums ×1
equals ×1
git ×1
hashcode ×1
hover ×1
jframe ×1
jpanel ×1
junit ×1
key ×1
merge ×1
minimum-size ×1
performance ×1
process ×1
reflection ×1
rust ×1
subtitle ×1
tableview ×1
testing ×1
type-safety ×1
unit-testing ×1
waitpid ×1
wavefront ×1
xcode ×1