我是一个视觉工作室新手,目前正在使用VS 2010 express,C#和XNA 4.0开发游戏.
我正在尝试调试我正在开发的一个小游戏,当某个事件发生时使用Console.WriteLine调用.不幸的是,当我执行程序时,visual studio布局发生了变化,输出面板消失,直到程序退出(所以我只能在程序结束后分析输出).
我想知道是否有可能以及如何保持输出面板可见.
假设我有以下课程:
public class GenericClass<T>
{
public T Find()
{
//return T if found otherwise null or Nullable<T>
}
}
Run Code Online (Sandbox Code Playgroud)
在某个地方,我想把我的班级专门T
用于a class
,其他时候用a struct
.我正面临这个问题:我不能返回一个Nullable<T>
if T
类型不限于一个struct
.
我想提供一个我的Find
方法的实现,如果T
专门用于a class
或a struct
.如果Find
失败,我想返回,null
否则T
是一个类Nullable<T>
.
没有使用反射可能吗?如果有,怎么样?
我只是运行一些代码来获取我的cmputer的可用端口列表,当我有3个免费的COM端口时,它返回了我的错误.我该如何解决这个问题?
我的代码:
public static void main(String[] args) {
//SerialParameters params=new SerialParameters();
// System.out.println(CommPortIdentifier.PORT_SERIAL );
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
System.out.println(portList.hasMoreElements());
while(portList.hasMoreElements()){
System.out.println("Has more elements");
CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
System.out.println(portId.getName());
}
else{
System.out.println(portId.getName());
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:false
在讨论我问的另一个问题时,@ Aaron Digulla指出了以下问题:
如果安装了Java SDK,则Java安装的根目录中应该有一个"src.zip"文件.如果它丢失了,请再次下载Java.当您打开JTable类型时(或者当您单击堆栈跟踪中的行时),Eclipse应该自动找到源并显示给您.
该文件src.zip
存在给我,但我仍然无法访问JTable
类似@Aaron 的来源说.可能是什么问题呢?我怎样才能用Eclipse解决这个问题?
不过,"未知来源"让我很担心.这意味着您的Java版本没有调试符号.确保你a)在开发时使用SDK,b)你的SDK包含调试符号,c)不要告诉命令java在加载类时剥离调试符号.
a)我正在使用Eclipse,为什么我不应该使用SDK?
b)我如何知道我的SDK是否包含调试符号?如果没有,我该如何添加它们?
c)如何检查Eclipse是否告诉java
剥离调试符号?
抱歉这些平庸的问题,但我觉得我不完全理解Java开发过程.
当行包含错误时,Eclipse会在左侧显示错误图标.如果单击该图标,则会显示提议表,并列出一些可能的解决方案,如果jvm找到任何解决方案.
是否可以使用键盘上的快捷方式激活建议的问题解决方案列表?
假设我有一个名为foo的方法,将2个Object作为参数.两个对象属于同一类型,并且都实现了可比较的接口.
void foo(Object first, Object second){
if (!first.getClass().isInstance(second)) //first and second of the same type
return;
Comparable firstComparable = (Comparable)first; //WARNING
Comparable secondComparable = (Comparable)second; //WARNING
int diff = firstComparable.compareTo(secondComparable); //WARNING
}
Run Code Online (Sandbox Code Playgroud)
前2个警告是:
可比较是原始类型.应参数化对泛型类型Comparable的引用
最后警告:
类型安全:方法compareTo(Object)属于原始类型Comparable.应参数化对泛型类型Comparable的引用
我怎么能重构我的代码才能删除这些警告?
编辑:我可以不改变foo方法的签名吗?
我正在阅读关于尾递归的这篇文章.
我将复制发布的解决方案:
unsigned int f( unsigned int a ) {
if ( a == 0 ) {
return a;
}
return f( a - 1 ); // tail recursion
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如果结果取决于几个递归函数调用呢?例如:
unsigned int f( unsigned int a ) {
if ( a == 0 ) {
return a;
}
return f(a -1) + f( a - 1 );
}
Run Code Online (Sandbox Code Playgroud)
上面的代码会被编译器优化吗?
假设我有一个以递归方式访问的结构。
伪代码:
visit(node n)
{
if (n == visited)
return;
//do something
setVisited(n);
foreach child_node in n.getChildren(){
visit(child_node);
}
}
Run Code Online (Sandbox Code Playgroud)
根据这个线程尾递归可以在以下情况下发生:
尾递归基本上是在以下情况下:
- 只有一个递归调用
- 该调用是函数中的最后一条语句
在上面的伪代码中,递归调用是最后一条语句,但由于调用发生在循环内,因此存在多个递归调用。我猜编译器无法检测到尾递归。
我的问题是:
无论如何重构上面的代码以使其尾递归?我正在寻找一种不会删除递归的解决方案,如果有的话(例如,我不想使用堆栈来模拟递归并将其转换为迭代函数)。
这可能吗?
如果语言是相关的,我正在使用 C++。
我查看了缓冲区溢出漏洞的基础知识,并尝试了解堆栈的工作原理.为此,我想编写一个简单的程序,将返回地址的地址更改为某个值.任何人都可以帮我弄清楚基本指针的大小以获得第一个参数的偏移量吗?
void foo(void)
{
char ret;
char *ptr;
ptr = &ret; //add some offset value here
*ptr = 0x00;
}
int main(int argc, char **argv)
{
foo();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
生成的汇编程序代码如下所示:
.file "test.c"
.text
.globl foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
leaq -9(%rbp), %rax
movq %rax, -8(%rbp)
movq -8(%rbp), %rax
movb $0, (%rax)
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size foo, .-foo
.globl main
.type …
Run Code Online (Sandbox Code Playgroud) 我试图找出丢包和数据包重复问题之间的区别.有谁知道'数据包重复'到底是什么?当在TCP中检测到丢失时,它是否与重新发送数据包相同?