我有一个简单的程序:
public class Mathz {
static int i = 1;
public static void main(String[] args) {
while (true){
i = i + i;
System.out.println(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序,我看到的是0对i我的输出.我原本预计会有第一次i = 1 + 1,然后是i = 2 + 2,然后是i = 4 + 4等等.
这是因为我们一旦尝试i在左侧重新声明,它的值会重置为0?
如果有人能指出我更精细的细节,这将是伟大的.
更改int为long,似乎是按预期打印数字.我惊讶于它达到最大32位值的速度有多快!
我最近开始开发一个应用程序,最后让我的node.js服务器与我的mongodb数据库进行通信.
我想插入一堆看起来像这样的JSON对象:
{
'Username': 'Bob',
'longitude': '58.3',
'latitude': '0.3'
}
Run Code Online (Sandbox Code Playgroud)
如果将此Object插入myCollection,然后我尝试使用Username Bob再次插入一个对象,但是使用不同的坐标,我想要最新的'Username':'Bob'对象来替换之前的对象.myCollection中只能有一个带有'Username'的对象:'Bob'.
如果这是一个关系数据库,我会把Bob作为主键或者其他东西,但我想知道用mongoDb做到这一点的最佳方法是什么.我应该使用update + upsert方法吗?我试过了,它似乎没有用!
抱歉,如果这看起来像一个愚蠢的问题,但我仍然是所有这一切的新手.
首先,我想说我正在使用遗留代码,无论我想要多少,我都无法改变它.
顺便说一句,我要做的是验证是否调用了super.method().这是我试图用Mockito/Junit测试的具体内容:
class foo extends JApplet(){
public void destroy(){
super.destroy();
}
}
Run Code Online (Sandbox Code Playgroud)
通常情况下,如果这不是一个被调用的超级方法,那么在测试用例中就足够了:
verify(foo).destroy();
Run Code Online (Sandbox Code Playgroud)
我已经看过几次问这个问题,通常回答是"继承是坏的,改变你的代码",遗憾的是我完全不能做.是否有人知道我可以做的任何框架或小小技巧来测试这个?
提前谢谢 - 我知道这是一个棘手的问题!
所以我有一个文件的文件:
puddle2_1557936:/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)
我想使用grep命令
grep puddle2_1557936
Run Code Online (Sandbox Code Playgroud)
使用cut命令(或必要时的其他命令)混合显示此部分:
/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)
到目前为止,我知道如果这样做
grep puddle2_1557936 | cut -d ":" -f1
Run Code Online (Sandbox Code Playgroud)
然后它会显示
puddle2_1557936
Run Code Online (Sandbox Code Playgroud)
那么反正的定界符切割命令是什么呢?
注意:解决方案必须从开始grep puddle2_15579636.
我正在尝试在mongodb中使用一些地理定位功能.使用$ near的查询查询似乎不起作用!
我目前在我的数据库中有这个对象:
{
"Username": "Deano",
"_id": {
"$oid": "533f0b722ad3a8d39b6213c3"
},
"location": {
"type": "Point",
"coordinates": [
51.50998,
-0.1337
]
}
}
Run Code Online (Sandbox Code Playgroud)
我也设置了以下索引:
{
"v": 1,
"key": {
"location": "2dsphere"
},
"ns": "heroku_app23672911.catchmerequests",
"name": "location_2dsphere",
"background": true
}
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时:
db.collectionname.find({ "location" : { $near : [50.0 , -0.1330] , $maxDistance : 10000 }})
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
error: {
"$err" : "can't parse query (2dsphere): { $near: [ 50.0, -0.133 ], $maxDistance: 10000.0 }",
"code" : 16535
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我哪里出错了?任何帮助将非常感激!
我目前正在使用一些漂亮的iffy代码.代码本身不是遗留的,但它使用的框架是遗留的并且非常糟糕.
我想开始为一个类编写一些junit测试(换一个!)但是为了有效地这样做,我需要添加一些getter和setter.
我需要setter所以我可以检查类中私有变量的状态(这里是一种状态机设计模式),我需要getter来模拟某些方法中的私有变量.
您是否会说为了能够编写单元测试而将getter和setter添加到类中是坏的,好的还是简单的可接受的?
为了给出一些背景知识,我已经学习了大约10个月的java,所以我真的没那么有经验.我最近读过一些关于如何测试私有方法和变量的不良做法.
在完美的世界中,你不应该这样做,因为它暗示了糟糕的设计 - 但是,我正在使用遗留框架,其中大多数方法都是通过反射调用的,这是糟糕的设计,但无论如何我都无法改变.请不要回复说"你应该重新设计代码",因为我无法改变框架的工作方式.
我想测试一个'flow'类以某种方式运行并根据私有变量的状态调用正确的方法,我想确保某些方法将私有实例变量设置为正确的值,如果另一个私有变量有一定的价值.当我将来对类进行更改时,我可以确保类的流/行为没有被破坏或更改.
现在,因为流程主要基于私有实例变量的状态,并且因为测试私有实例变量的状态不好 - 我怎么测试类?
测试所有工作的私有变量的方法:
在代码末尾实现默认访问getter和setter,并将junit测试类放在同一个包中.清楚地评论它们应该仅用于测试.
使实例变量默认访问而不是私有,并将junit测试类放在同一个包中.无论如何,同一个包中的其他类都不会实例化此类.
通过反射测试私有变量 - 我失去了IDE功能,因为如果我更改变量的名称Eclipse将不会重构,并且可能是将来手动更改字符串以匹配要测试的类中的变量名称的痛苦.
上面三个中的哪一个是"较小的"邪恶使用?是否更好地测试私有变量然后根本没有测试?
所以我刚刚开始学习 UNIX,需要回答一个非常基本的问题!我花了几个小时寻找正确的方法,但似乎我真的无法理解它!
我有一个名为“contactdetails”的脚本。我想通过在任何目录中输入“contactdetails”来运行它,但我可以运行它的唯一方法是输入“sh contactdetails”。
现在我听说我应该将“#!/bin/sh”添加到我的脚本的第一行,但这并没有奏效。我还被告知我需要将它添加到 $PATH 环境变量中。我真的不明白这是什么意思,当我输入“echo $PATH”时,我得到“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: /bin:/usr/games”。
当我尝试在“/usr”目录中创建目录/文件时,我收到消息“权限被拒绝”。我通过我的作品服务器登录到 UNIX,这是问题吗?有没有办法让我只输入它的名字而不是 sh itsname 来运行脚本?
提前致谢!
编辑:如果有任何相关性,我还更改了可执行文件(chmod 755 contactdetails)的权限!我正在使用腻子!
经过一个小时的扎实研究,我仍然无法做到这一点.
这是我的Servlet代码:
package com.fdm.ProjectWeb.RedirectServlets;
import java.awt.List;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.spi.DirStateFactory.Result;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.jstl.sql.ResultSupport;
import com.fdm.ProjectWeb.Controller.ValidateRegisterInputController;
import com.fdm.ProjectWeb.Model.OraclePullListOfUsers;
import com.fdm.ProjectWeb.Model.OracleUserManagement;
public class VerifyRedirect extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{
OraclePullListOfUsers pull = new OraclePullListOfUsers();
ResultSet rs = pull.unverifiedUsers();
List list = new List();
try {
while (rs.next()){
list.add(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace(); …Run Code Online (Sandbox Code Playgroud) 我有一个非常基本的代码执行一个select查询并返回一个布尔值,具体取决于结果集是否为空.
public boolean checkIfUserHasPreferences(String username){
ResultSet rs = null;
boolean checkBoolean = false;
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
con = DriverManager.getConnection(Messages.getString("OracleUserManagement.0"), Messages.getString("OracleUserManagement.1"), Messages.getString("OracleUserManagement.2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
PreparedStatement statement = con.prepareStatement("SELECT USERNAME FROM USER_PREFERENCES WHERE USERNAME = ?");
statement.setString(1, username);
rs = statement.executeQuery();
if (rs == null){
System.out.println("I checked it was true!");
checkBoolean = true;
} else {
System.out.println("I checked it was false!");
checkBoolean = false;
}
con.commit();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return checkBoolean;
}
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是,即使表/数据库是空的,它总是打印出"我检查它是假的!".
这是因为即使结果集返回0行,它也不是= null?我应该使用while(rs.next())来检查吗?
我想知道汇总数据的最佳方法是在Groovy中吗?
可以说我有以下数据:
[
[id: 1, name: bob, age:20, numberOfPackages: 10, numberOfPurchases:20 ],
[id: 1, name: bob, age:20, numberOfPackages: 5, numberOfPurchases:6 ],
[id: 2, name: Rob, age:22, numberOfPackages: 3, numberOfPurchases:5 ],
]
Run Code Online (Sandbox Code Playgroud)
我想将它转化为以下(合并ID / 姓名 / 年龄,但和价格 / 数量每购买ID):
[
[id: 1, name: bob, age:20, numberOfPackages: 15, numberOfPurchases:26 ],
[id: 2, name: Rob, age:22, numberOfPackages: 3, numberOfPurchases:5 ],
]
Run Code Online (Sandbox Code Playgroud) 为什么这个非常简单的Python脚本不起作用?
我熟悉Java,所以我想我会给Python一个...但为什么这不起作用?
def playAgain(roundCounter):
reply = ""
replyList='y n'.split()
if roundCounter == 1:
print('Would you like to play again? Y/N')
while not reply in replyList:
reply = input().lower
if reply == 'y':
roundCounter == 1
elif reply == 'n':
print('Thanks for playing! Bye!')
sys.exit()
Run Code Online (Sandbox Code Playgroud)
这应该打印"你想再玩一次吗?" 然后继续请求用户输入,直到他们输入"Y"或"N".
出于某种原因,它会一遍又一遍地循环,并且不会突破循环 - 即使我键入'y'或'n'.
它是如此简单的一段代码,我不明白为什么它不起作用 - 实际上我在我的脚本中使用了一段几乎相同的代码,它运行良好!
我想知道是否有可能编写一个"禁用"其他应用程序的ios应用程序?
例如,当我按下我的应用程序上的禁用按钮时,我无法在接下来的15分钟内打开whatsapp.
如果那是不可能的,可以采取阻止对某个URL的所有HTTP请求的解决方法吗?甚至阻止(或关闭)某些应用程序的通知?
我也一直想知道安全模块是否可能不允许这样的代码.
任何帮助将非常感激!
java ×6
junit ×3
mockito ×3
mongodb ×2
resultset ×2
testing ×2
unit-testing ×2
unix ×2
2dsphere ×1
aggregate ×1
bash ×1
coordinates ×1
cut ×1
geojson ×1
grep ×1
groovy ×1
group-by ×1
input ×1
ios ×1
jdbc ×1
jsp ×1
jstl ×1
list ×1
loops ×1
math ×1
nosql ×1
null ×1
python ×1
scripting ×1
servlets ×1
sh ×1
sql ×1
sum ×1
super ×1
while-loop ×1