我们知道android活动周期有多个阶段.
之间onStart()和之间onStop()称为可见生命周期onResume(),onPause()称为前景生命周期
它们之间的关键区别是什么?请尽可能举例.
我正在用java制作一个基于平铺的平台游戏。我渲染一个存储在二维数组中的地图,但是当这个数组非常大时,我的游戏开始变得缓慢。我意识到我必须只渲染地图中可见的部分,我尝试这样做,但我编写了非常糟糕的代码,只能部分工作,所以我将其删除。我怎样才能正确地做到这一点?这是我的代码(没有黑客的东西)。另外我该如何使用System.nanoTime()而不是System.currentTimeMillis()?
package sexy_robot_from_another_dimension;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Game extends JPanel
{
int playerX = 50;
int playerY = 50;
static boolean up = false;
static boolean down = false;
static boolean right = false;
static boolean left = false;
int playerSpeed = 1;
String[][] map;
int blockSize = 20; …Run Code Online (Sandbox Code Playgroud) 我长期使用电子表格的技术之一是就地复制/粘贴特殊值 (C/PSV)。使用公式生成我感兴趣的值 IC/PSV,然后可以删除源数据。
所以我写了一个使用这种技术的宏,但单元格最终是空的。但如果我将宏分成两个,在 C/PSV 之前结束第一个宏,那么一切都会按预期进行。为什么是这样?有没有更好的方法来解决这个问题?这是我的三个宏。
function Step1() {
var spreadsheet = SpreadsheetApp.getActive();
var range = spreadsheet.getActiveRange();
CopyRangeToNewSheet(spreadsheet, range);
spreadsheet.getCurrentCell().offset(-1, 6).activate();
FillInHeaders(spreadsheet);
spreadsheet.getCurrentCell().offset(1, -4).activate();
FillInFormulas(spreadsheet);
spreadsheet.getCurrentCell().offset(0, -4, range.getNumRows(), 5).activate();
spreadsheet.getCurrentCell().offset(0, 0, 1, 5).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};
function Step2() {
var spreadsheet = SpreadsheetApp.getActive();
var keepers = spreadsheet.getRange('G:J');
keepers.activate();
keepers.copyTo(keepers, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
var discard = spreadsheet.getRange('A:F')
discard.activate();
spreadsheet.getActiveSheet().deleteColumns(discard.getColumn(), discard.getNumColumns());
};
function BothSteps() {
var spreadsheet = SpreadsheetApp.getActive();
var range = spreadsheet.getActiveRange();
CopyRangeToNewSheet(spreadsheet, range);
spreadsheet.getCurrentCell().offset(-1, 6).activate();
FillInHeaders(spreadsheet);
spreadsheet.getCurrentCell().offset(1, -4).activate();
FillInFormulas(spreadsheet);
spreadsheet.getCurrentCell().offset(0, -4, …Run Code Online (Sandbox Code Playgroud) 我现在必须重构一些代码,它基本上是一个方法(大约1000行代码),它做了很多计算并且有很多变量.我不确定如何重构它.代码是否像
...
calculateSth(param1,param2,param3,param4,param5, params6);
calculateSthElse(param1,param2,param3);
...
Run Code Online (Sandbox Code Playgroud)
看起来不错?
我可以引入参数对象,但这些对象只能用作某些方法的参数,所以它看起来像这样
...
calculateSth(calculateSthObject);
calculateSthElse(calculateSthElseObject);
...
Run Code Online (Sandbox Code Playgroud)
或者我可以将所有东西放在一个大物体上并制作它
...
calculateSth(calculateObject);
calculateSthElse(calculateObject);
...
Run Code Online (Sandbox Code Playgroud)
但是在该解决方案中,我必须在方法的开头提取私有方法中所需的所有内容并在最后设置,并且要找出私有方法中使用的值会更加困难.需要大约一半的变量作为输出.
你会怎么做?
PS计算并不简单,所以做的事情就像
calculateObject.setMagicValue4((calculateObject.getMagicValue() * calculateObject.getMagicValue2() / calculateObject.getMagicValue3())
Run Code Online (Sandbox Code Playgroud)
只会让人难以阅读.
标题可能不太清楚.我有以下例子:
Authenticator对象使用凭据对用户进行身份验证.它返回一个AuthResult对象.此AuthResult对象表示身份验证成功,或者失败(如果是,为什么失败,例如找不到用户名).
我怎么能在测试中说出这个?'testShouldReturnAuthObjectWithStatusSuccessOnValidLogin'?
我有一个XML,其中一个值为"null tag"的文本节点(随机)出现在文件的不同位置.
我的问题是如何用其他文本替换文本,其中元素(和父节点)名称是未知的.我已经创建了一个看起来有点笨重的XSLT文件,我不确定它在转换时间的效率.
这是我创建的示例测试XML:
<root>
<sub_root>abc</sub_root>
<sub_root>
<child>test value</child>
<child2>test value</child2>
<sub_child>
<node1>data</node1>
<node2>data2</node2>
<node3>
<grand_child>test value</grand_child>
</node3>
<node4>test value</node4>
</sub_child>
</sub_root>
</root>
Run Code Online (Sandbox Code Playgroud)
这是XSLT:
<xsl:template match="@*|*|text()">
<xsl:copy>
<xsl:choose>
<xsl:when test="text()='test value'">
<xsl:apply-templates select="@*|*"/>
<xsl:text>replaced</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="@*|*|text()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
这是所需的输出,我试图生成:
<root>
<sub_root>abc</sub_root>
<sub_root>
<child>replaced</child>
<child2>replaced</child2>
<sub_child>
<node1>data</node1>
<node2>data2</node2>
<node3>
<grand_child>replaced</grand_child>
</node3>
<node4>replaced</node4>
</sub_child>
</sub_root>
</root>
Run Code Online (Sandbox Code Playgroud)
这个代码可以用更好的方式(以任何方式)编写吗?或者我的代码是否足够好?
我正在重构我的一个项目 - 购物车.我的代码紧密耦合的一个区域是"Viewer"类 - 为了生成供用户查看的信息,它通常需要两个或多个以下对象的组合:
出于各种原因,我无法真正分解显示方法.
Martin Fowler的Refactoring将此视为"长参数列表"的气味.这里的相关重构是"引入参数对象".但是,我对此犹豫不决,因为这样做会将松散相关的数据耦合在一起.它也会让我锁定这三个对象之间非常狭窄的一对一关系 - 虽然这对我的应用程序来说就像现在一样,但它没有现实意义.(由于只有一个商店目录,因此可能存在许多"客户邮件信息"对象,并且每个对象可能与许多"客户订单"对象相关).
有没有人有这个优雅的解决方案?
我有一个对象的列表,在我们的例子中被称为规则,这个对象本身是一个字段列表,我必须对其进行哈希码比较,因为我们不能在系统中复制规则.
即假设我有两个规则R1和R2,字段为A和B.
现在,如果R1中A和B的值分别为7和2.
在R2中它分别是3和4然后我用来检查系统中规则的重复性的过程是哈希码比较失败
我使用的方法是
for(Rule rule : rules){
changeableAttrCode=0;
fieldCounter=1;
attributes = rule.getAttributes();
for(RuleField ruleField : attributes){
changeableAttrCode = changeableAttrCode + (fieldCounter * ruleField.getValue().hashCode());
fieldCounter++;
}
parameters = rule.getParameters();
for(RuleField ruleField : parameters){
changeableAttrCode = changeableAttrCode + (fieldCounter * ruleField.getValue().hashCode());
fieldCounter++;
}
changeableAttrCodes.add(changeableAttrCode);
Run Code Online (Sandbox Code Playgroud)
这里是changeableAttrCodes,我们存储所有规则的哈希码.
那么请建议我更好的方法,以便将来不会出现这种问题,也可以看出系统中的规则错误.
提前致谢
我正在向ArrayList添加元素,它正确地添加了第一个元素,但是当我添加任何后续元素时,它擦除了使用最近添加的值替换其他元素并向ArrayList添加新元素.
我使用arraylist和int运行测试,甚至是另一个创建的类,它工作得很好但是我在这里使用的自定义类会导致问题.
数组列表的代码是
public static void main(String args[]){
List<BasicEvent> list = new ArrayList<BasicEvent>();
list.add(new BasicEvent("Basic", "Door", 9, 4444, new Date(12,04,2010), new Time(12,04,21), 1, 0.98, 0));
list.add(new BasicEvent("Composite", "Door", 125, 4444, new Date(12,04,2010), new Time(12,04,20), 1, 0.98, 1));
list.add(new BasicEvent("Basic", "Door", 105, 88, new Date(12,04,2010), new Time(12,05,23), 1, 0.98, 0));
list.add(new BasicEvent("Basic", "Door", 125, 12, new Date(12,04,2010), new Time(12,05,28), 1, 0.98, 1));
list.add(new BasicEvent("Basic", "Door", 129, 25, new Date(12,04,2010), new Time(12,05,30), 1, 0.98, 0));
list.add(new BasicEvent("Basic", "Door", 125, 63, new Date(12,04,2010), …Run Code Online (Sandbox Code Playgroud) 我有以下代码行,效果很好:
$("a.grouped_elements[href$=.jpg],a.grouped_elements[href$=.png],a.grouped_elements[href$=.gif]").fancybox();
Run Code Online (Sandbox Code Playgroud)
问题是,如果href是.JPG它不起作用它只适用于.jpg.如何使上述不区分大小写,以便所有大写字母或无大写字母或混合都匹配文件扩展名?
谢谢