你知道,当你运行的是Android设备的第一次(你看到很多,如果你使用的仿真器),有是关于如何使用发射器和添加小工具一个有用的小教程,等我试图找到一个例子这在Google上,但我不能.我希望你知道我的意思.这是每一步都有蓝色"好"按钮的那个.
无论如何,我想为我的应用程序创建一个,但我不确定哪个是最好的方法去做.
我是否创建了一个片段,我可以在常规活动之上制作半透明片段并让它仅在第一次运行时出现?
我是否为教程的每个部分制作了一个半透明的.png并将其覆盖在第一次运行的常规启动器活动上?
如果我选择后者,我该如何调整各种屏幕尺寸?我可以在Photoshop中将图像渲染到各种尺寸,但这并不能涵盖所有尺寸.如果我去片段路线,我可以说"match_parent"而不用担心它.但后来我必须弄清楚Fragments是如何工作的,而且他们让我感到困惑.
我正在为一个类的项目工作,我的代码没有产生与参考代码相同的结果.
我将我的代码与参考代码逐行比较,它们看起来几乎完全相同.一切似乎在逻辑上等同.最终我开始更换线和测试,直到找到重要的线.
原来它是这样的(编辑:确切代码更低):
# my version:
max_q = max([x for x in self.getQValues(state)])
# reference version which worked:
max_q = max(x for x in self.getQValues(state))
Run Code Online (Sandbox Code Playgroud)
现在,这让我感到困惑.我尝试使用Python(2.7)解释器进行一些实验,使用max
带有和不带方括号的列表推导运行测试.结果似乎完全一样.
即使通过PyCharm进行调试,我也没有理由认为我的版本没有产生与参考版本完全相同的结果.到目前为止,我认为我对列表理解的工作方式(以及max()
函数的工作方式)有很好的处理,但现在我不太确定,因为这是一个如此奇怪的差异.
这里发生了什么?为什么我的代码产生的结果与参考代码不同(在2.7中)?没有括号的理解中的传递与传递括号的理解有何不同?
编辑2:确切的代码是这样的:
# works
max_q = max(self.getQValue(nextState, action) for action in legal_actions)
# doesn't work (i.e., provides different results)
max_q = max([self.getQValue(nextState, action) for action in legal_actions])
Run Code Online (Sandbox Code Playgroud)
我不认为这应该被标记为重复 - 是的,另一个问题是关于理解对象和列表对象之间的区别,但是max()
当给出"由X理解构建的一些列表"时,为什么会提供不同的结果,而不是' X理解'独自一人.
我会尽力把它变成一个全面的问题:
我正在编写一个方法来获取一个包含Android设备城市名称的String,由LocationManager
and getLastKnownLocation()
和所有这些确定.
然后我意识到我需要在另一个活动中再次做同样的事情,那么为什么不在LocationFinder
我的程序中创建一个完全独立的类(),而不是在任何地方编写重复的代码?
但是我遇到了困扰我的问题.例如,如果我创建这个类(LocationFinder
),它是否应该扩展Activity,即使它实际上从未可视化?所有这些类会做的是有各种样的吸气剂getLastKnownCity()
或getCurrentCity()
与返回字符串.我假设它不会扩展Activity类,因为它实际上不是一个活动.
但是接下来我用什么Context:
Geocoder geocoder = new Geocoder(Context context, Locale locale)
Run Code Online (Sandbox Code Playgroud)
?
这让我认为它必须是一项活动.所以我扩展了Activity,并用构造函数替换了
@Override
protected void onCreate(..............
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,即使我放了,也永远不会被召唤
String city = new LocationFinder().getLastKnownCity();
Run Code Online (Sandbox Code Playgroud)
我的第一行LocationFinder
的onCreate()
是
System.out.println("HEY!")
Run Code Online (Sandbox Code Playgroud)
它甚至都没有达到目的.我得到一个空指针android.internal.os.LoggingPrintStream.println()
和其他东西.
另外,还有一堆来自Activity类的系统常量.例如,我需要得到LOCATION_SERVICE
,这是一个String,如果不扩展Activity,我就无法获得.当然,我可以作弊,只是放入文字字符串,但这感觉不对.
我的问题实际上比标题更通用:
在编写最终将编译为LLVM中间代码,然后从那里到机器语言的代码时,架构在什么时候起作用?
假设我正在编写Rust(它使用LLVM作为后端).我是否能自动将Rust代码编译为LLVM可以定位的每个体系结构(假设该机器上有可以运行它的操作系统)?
或者可能是Rust标准库还没有"ARM兼容",所以即使LLVM以它为目标,我也无法编译到ARM?
如果我不使用任何标准库,我的整个程序只是一个立即返回的程序怎么办?可能是这样的情况,即使没有任何库,Rust(或你有什么)也无法编译到ARM(或者你有什么),即使LLVM以它为目标?
如果以上所有示例都编译得很好,那么我需要做些什么才能让我的代码在一个架构上打破而不能编译到某个架构?
相同品种的奖金问题:
谢谢.
我一直听说类型提示将如何成为3.5中的新功能,但这让我想知道3.3中的箭头指示符( - >)是什么?
您可以在3.3语法规范中看到它,这是我在2年前提出的这个问题中找到的.
我想知道,之前是否存在类型暗示,但是以有限的方式,3.5正在带来更多的主要支持?或者我对类型提示的理解不正确,它实际上意味着什么呢?
经典的计数排序示例要求您构建一个大小等于输入数组的最大整数的数组.
例如,如果您的数组是[1,6,3,30000,8],则需要一个10000长的数组用于计数排序.
这可能不是在整数上使用哈希表在相同的线性时间内完成的吗?只是一张简单的地图?
在python中,它是这样的:
counting_map = {n: 0 for n in input_array} # start by mapping all to 0
for num in input_array:
counting_map[n] += 1
Run Code Online (Sandbox Code Playgroud)
我知道这对整数来说真的很有效,但在这种情况下,映射解决方案并不优越吗?
时间复杂度方面,您在O(n)时间初始化映射,然后在O(n)时间内遍历数组,然后在O(1)时间内对输入执行散列函数.(显然,大O符号不是算法是否良好的最终决定因素,我只是想确保我的理论在这里是正确的).
这是一个很好的解决方案,还是"原始"计数排序还能做出一些我看不到的优势?我也很好奇为什么"基于散列图的计数排序"几乎不会返回任何谷歌搜索结果,使它看起来几乎没有使用过.散列的开销是否足以超过其较小的内存占用量?
我对Python比较陌生,我有兴趣找到创建枚举的最简单方法.
我发现的最好的是:
(APPLE, BANANA, WALRUS) = range(3)
Run Code Online (Sandbox Code Playgroud)
其中APPLE为0,BANANA为1等.
但我想知道是否有更简单的方法.
以下代码给出了"通用数组创建"错误.
public class TestClass<K, V> {
Entry[] entry;
private TestClass() {
entry = new Entry[10]; // <--- this line gives generic array creation error
}
private class Entry {
public Entry() {
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样,因为类Entry
不是泛型类,并且没有泛型类型的对象.
是因为内部类仍然可以访问泛型类型,即使它不使用任何类型?这是我能想到的最好的,但如果是这样的话,我不明白为什么Java看起来不会看到它不使用泛型类型,因此不是泛型类?
是的,我看过许多关于泛型类型数组的线程,但是没有,我没有找到一个关于内部类的线程.
我试图在使用数组时围绕原始内存在不同语言中的样子.
请考虑以下Java代码:
String a = "hi";
String b = "there";
String c = "everyone";
String[] array = {a, b, c};
Run Code Online (Sandbox Code Playgroud)
显然数组是持有引用,而不是对象; 也就是说,在三个引用的内存中存在一个连续的数组,每个引用指向对象所在的内存中的某个其他位置.因此,物体本身不一定坐在三个连续的桶中; 而参考文献是.
现在考虑一下:
String[] array = {"hi", "there", "everyone"}
Run Code Online (Sandbox Code Playgroud)
我想在这种情况下,字符串存在于内存中的所有其他常量,然后数组保存对内存中这些常量的引用?因此,在原始内存中,数组看起来并不像['h', 'i', '\0', 't', 'h', 'e', 'r', 'e'... (etc)]
.(为方便起见,使用c风格的终止).相反,它更像['a83a3edf' ,'a38decd' ... (etc)]
是每个元素都是内存位置(引用).
我从这个思考过程中得出的结论是,在Java中,你永远不能将数组想象成内存中连续对象的桶,而是连续的引用.我想不出有什么方法可以保证对象总是在Java中连续存储.
现在考虑C:
char *a = "hi";
char *b = "there";
char *c = "everyone";
char *array[] = {a, b, c};
Run Code Online (Sandbox Code Playgroud)
上面的代码在功能上等同于上面的Java - 也就是说,数组保存对其他内存位置的引用(指针).与Java一样,指向的对象不一定是连续的.
但是,在以下C代码中:
struct my_struct array[5]; // allocates 5 * size(my_struct) …
Run Code Online (Sandbox Code Playgroud) 将元素添加到Java ArrayList的末尾应该花费O(1)时间.但是,向中间添加元素必须将右半部分移动一个以维持顺序.这应该花费O(n)时间(实际上O(n/2)简化为O(n)).
我的问题是:
在原始内存中,这个移位是移动驻留在ArrayList中的对象本身,还是只移动指向它们的引用?
无论它是什么,时间复杂度都是相同的,但开销可能会有所不同.将一堆巨大的物体移到一边为中间的一个腾出空间可能比在内存中移动一些int大小的引用要大得多.
所以:
这是什么?我倾向于猜测它是被移位的引用,因为Java List保存对堆上对象的引用,这些对象可能在内存中的任何"顺序"中.
我对上述所有内容的任何错误?
我问的原因纯粹是理论上的.我只是想知道内存中发生了什么,如果大量的对象被交换,或者它只是被拖拽的引用.谢谢.
(注意:这几乎是我今天早些时候提出的这个问题的后续内容.)
java ×3
python ×3
android ×2
arrays ×2
algorithm ×1
arraylist ×1
c ×1
enumeration ×1
enums ×1
generics ×1
gps ×1
jvm ×1
linux ×1
llvm ×1
location ×1
python-2.7 ×1
python-3.5 ×1
python-3.x ×1
sorting ×1
type-hinting ×1