小编Zab*_*uza的帖子

在java 8中比较没有纳秒的LocalDateTime

我想比较2个LocalDateTime对象而不考虑纳秒.这就是我目前正在做的事情.这有什么更好的方法吗?

LocalDateTime object1 = LocalDateTime.of(2014, 3, 30, 12, 30, 23, 12000);
LocalDateTime object2 = LocalDateTime.of(2014, 3, 30, 12, 30, 23, 12004);

System.out.println(object1.isEqual(object2)); // false

LocalDateTime  objec1tWithoutNano = object1.minusNanos(object1.getNano());
LocalDateTime  objec2tWithoutNano = object2.minusNanos(object2.getNano());

System.out.println(objec1tWithoutNano.isEqual(objec2tWithoutNano)); // true  
Run Code Online (Sandbox Code Playgroud)

java java-8

9
推荐指数
1
解决办法
1048
查看次数

组合包名称的命名约定

我想创建一个名为的包form validator.

写作更好吗?

  • form_validator,
  • formValidator 要么
  • formvalidator

我想提一下,我想避免 form.validator.那form-validator是被禁止的.

java naming-conventions package

9
推荐指数
4
解决办法
2158
查看次数

C 样式数组不再处理记录

我以前使用过这个人为的代码

record Foo(int bar[]) {}
Run Code Online (Sandbox Code Playgroud)

这是利用 C 风格的数组符号。它在 Java 15 中编译得很好。

现在,突然之间,随着Java 16中记录的正式发布,它不再编译了。这是jshell的输出:

record Foo(int bar[]) {}
Run Code Online (Sandbox Code Playgroud)

为什么它在 Java 15 中编译,这是一个错误吗?出于好奇,为什么它在记录中不受支持,而在 Java 的其他任何地方都受支持?

我正在使用javac来自Adoptium(基于 OpenJDK)。

java arrays java-record java-15 java-16

9
推荐指数
1
解决办法
207
查看次数

用于在矩阵中找到从单个源到多个目的地的最佳路线的算法

问题陈述:我们有一个m*n矩阵.起点是左上角的单元格.我们只能在矩阵中向下或向右.在矩阵中随机选择目的地.现在我们需要找到具有以下约束条件的最佳例程:

  1. 路由上的每个节点只能有一个父节点,但最多可以有两个子节点.
  2. 尽量减少重复路线.例如,如果我们的目的地如下所示:

第一个例子

我们应该将它减少到右侧,而不是使用左侧的例程.

  1. 喜欢向右然后向下,除非下降比正确短.

在下面的例子中,我们不应该选择左侧解决方案,而是选择右侧的一个,因为它从(2,0)向下移动(向下移动,向下移动(2),而不是向右移动2) 0,1).

第二个例子

其他示例如下所示,这些都是最好的例程.

还有7个例子

我正在研究这个问题一段时间.我已经研究了一些算法,如传递减少和Dijkstra,但没有弄明白.如果你想给我一些关于算法的提示,我可以调查一下这会很棒.

谢谢!


编辑2:

我收到了一些关于Dijkstra算法和使用动态编程的想法.我认为对于Dijkstra算法,如果您可以提供将此问题转换为图形问题的提示,那将是很好的.我正在研究算法并认为它的主要问题是不必访问单元格.在下面的示例中,如果我们删除其中一个目的地,则与左侧地图相比,整个例程将发生重大变化.

第四个例子

对于动态编程,我考虑了节点应该如何加入路径.优先级应如下:

优先图

但问题是它没有考虑动态视图的问题,这会输出错误的结果.

algorithm

8
推荐指数
1
解决办法
419
查看次数

重载解析,调用哪个方法

假设我有一个ComponentBase班级,谁是 的孩子ObjectContextDecorator和孙子ObjectContext

public class ComponentBase extends ObjectContextDecorator {
}

public class ObjectContextDecorator extends ObjectContext {

    public void set(String objectTypePath, String characteristicName, Object value) {
        //...
    }
}

public class ObjectContext {
    public void set(String characteristicName, Object value, boolean forced) {
       //...
    }
}
Run Code Online (Sandbox Code Playgroud)

和上的set方法非常相似。考虑这个示例代码:ObjectContextDecoratorObjectContext

ComponentBase base = new ComponentBase();
base.set(""OTM4E_EFFLEVEL"", ""IE1 / STD"", true);
Run Code Online (Sandbox Code Playgroud)

两种方法的签名都适合正确调用的方法。我无法更改方法的签名,因为它不是我的代码。

编译器如何知道我打算调用哪个方法?

我知道在 IDE 上您可以指出您实际打算调用哪个方法,但在这种情况下,我使用类加载器来加载一个类,该类具有包含示例代码的方法。

java overloading method-signature

8
推荐指数
1
解决办法
109
查看次数

每次方法调用后检查对象是否为null

我有这个简单的片段,我希望以更优雅的方式重新设计,可能使用最新的JDK 8功能:

String x = methodCall();
if(x==null) {x=method2();}
if(x==null) {x=method3();}
if(x==null) {x=method4();}

// doing calculation with X
Run Code Online (Sandbox Code Playgroud)

java java-8

7
推荐指数
1
解决办法
1181
查看次数

无法使用Java 10.0.1运行Eclipse

我已将Java更新为版本10.0.1,现在我无法再运行Eclipse了.

它显示了这条消息:

必须提供Java运行时环境(JRE)或Java开发工具包(jdk)才能运行eclipse.搜索以下位置后未找到Java虚拟机:

C:\Program Files\Java\ire1.8.0_144\bin

我尝试从高级设置插入新路径但不起作用.

java eclipse java-10

7
推荐指数
1
解决办法
1万
查看次数

Java以YYYYMMDD格式获取一年中的所有工作日

我的周日挑战是将特定年份的工作日获取并保存到 CSV 等文件中。

我有以下代码,我面临的问题是:如何以特定格式(即 YYYYMMDD)打印日期,因为代码当前打印的内容类似于 2019 年 1 月 19 日星期六 00:00:00 CET。

另外,如果我可以排除周末,并且通常是否有更好的方法在 Java 8 中编写更短的代码。

import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;

public class DatesInYear
{

    public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

    public static void main (String[] args) throws java.lang.Exception
    {

        Date dt = new Date();
        System.out.println(dt);

        List<Date> dates = printDates("20190101","20191231");


        Collections.reverse(dates);
        System.out.println(dates.size());
        for(Date date:dates)
        {
            SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd");
            System.out.println(format1.format(date));

        }
    }
    public static List<Date> printDates(String fromDate, String toDate)
    {
        ArrayList<Date> dates = new ArrayList<Date>();

        try …
Run Code Online (Sandbox Code Playgroud)

java time date java-8

7
推荐指数
3
解决办法
524
查看次数

使用 gradle 从 java 项目中删除未使用的导入

我们如何使用 Gradle 任务删除 java 项目中未使用的导入

java import gradle

7
推荐指数
1
解决办法
4457
查看次数

Lights Out - 寻找最坏的初始状态

我有一个围绕一个名为Lights Out的小游戏的任务。


游戏

游戏由一个尺寸为 3x3 的棋盘组成,其中每个单元格可以是 1 或 0,例如:

0 1 0
1 1 0
0 0 0
Run Code Online (Sandbox Code Playgroud)

当所有单元格都为 1 时,游戏就被解决了,所以:

1 1 1
1 1 1
1 1 1
Run Code Online (Sandbox Code Playgroud)

并且在每一轮中,用户都可以单击任何单元格,这将翻转其状态以及向左、向右、向上和向下(如果存在)的邻居的状态。因此,单击第一个示例板中间的单元格将产生:

0 0 0
0 0 1
0 1 0
Run Code Online (Sandbox Code Playgroud)

任务

现在我必须为游戏找到最糟糕的初始棋盘,并计算出如果玩得最佳,它需要多少回合才能达到已解决状态。


试图

我试图编写一个递归求解器,在给定初始棋盘的情况下,它会找到解决游戏的最佳回合顺序。在那之后,我想用所有可能的初始板来喂养它。

但是,递归遇到堆栈溢出。所以我可能不得不以迭代的方式重写它。我怎样才能做到这一点?

这是代码,作为最小的完整示例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.StringJoiner;
import java.util.stream.Collectors;
 
public class GameTest {
    public static void main(String[] args) {
        boolean[][] board = {
            {false, false, false},
            {false, true, false}, …
Run Code Online (Sandbox Code Playgroud)

java algorithm solver

7
推荐指数
1
解决办法
286
查看次数