小编Han*_*ans的帖子

在字符串上找到重复的单词并计算重复次数

我需要在字符串上找到重复的单词,然后计算它们被重复的次数.所以基本上,如果输入字符串是这样的:

String s = "House, House, House, Dog, Dog, Dog, Dog";
Run Code Online (Sandbox Code Playgroud)

我需要创建一个没有重复的新字符串列表,并在其他地方保存每个单词的重复次数,如下所示:

新字符串:"House,Dog"

新的Int数组:[3,4]

有没有办法用Java轻松完成这项工作?我已经设法使用s.split()分隔字符串但是我如何计算重复并在新字符串上消除它们?谢谢!

java string repeat

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

什么是创建所有可能组合的有效算法?

比方说,有ñ条目,每个人可以利用的价值的金额01.这意味着这些条目有2 ^ n种可能的组合.条目数可以从16不等.

如何创建每个可能的组合作为一系列数字( n = 2:00,01,10,11),而不是诉诸于一千个IF?

algorithm combinations boolean

6
推荐指数
1
解决办法
5182
查看次数

C#清除List <T>,值类型仍然是O(n)操作吗?

根据Microsoft 文档,在List上调用Clear()是O(n)操作.我猜这是因为如果列表要保存引用,则需要将它们置空.我想知道如果列表具有值类型,Clear()是否仍然是O(n)操作,因为容量没有改变.重置索引指针和计数不应该足够吗?

我问这个是因为在当前的应用程序中,我们使用的列表在很短的时间内就被清除了数十万次,并想知道是否有不同的实现可以使它更快.

c# arrays performance list

6
推荐指数
1
解决办法
122
查看次数

C#如何使用Linq解析Object []以查找所有List <Int>对象?

在C#中使用Linq,如何查询Object[](data)以便它返回List<int>数组中的所有对象并将它们展平为单个List<int>

这是我试过的,但由于某种原因它不起作用:

List<int> IntData;

IntData = data.Where(n => n.GetType().IsGenericType)
              .Where(n => n.GetType().GetGenericTypeDefinition() == typeof(List<int>))
              .Select(n => (List<int>) n)
              .SelectMany( n => n));
Run Code Online (Sandbox Code Playgroud)

c# linq arrays parsing object

3
推荐指数
1
解决办法
969
查看次数

C#如何使用Linq根据Value的类型查询Dictionary的条目子集?

在使用Linq的C#中,是否可以根据Value的类型提取Dictionary的条目的子集,并将其转换为具有该类型值的Dictionary?

基本上,如果你有一个像这样的词典:

Dictionary<string, Object> Data;
Run Code Online (Sandbox Code Playgroud)

你可以做一些像:

Dictionary<string, int> IntData = Data.Query();
Run Code Online (Sandbox Code Playgroud)

这样新的Dictionary就会获得其值为Type int的所有e​​ntires.这可能吗?

c# linq dictionary types

2
推荐指数
1
解决办法
893
查看次数

C#如何在其类型为List &lt;T&gt;并且我有List &lt;object&gt;时设置PropertyInfo值

我有一个带有通用List属性的对象,其中T是原始值,字符串或枚举。此列表的泛型参数永远不会是引用类型(字符串除外)。现在,我有另一个参数类型为object的List。有没有一种方法可以在我的对象列表中设置该属性的值?如:

List<object> myObjectList = new List<object>();
myObjectList.Add(5);

property.SetValue(myObject, myObjectList, null);
Run Code Online (Sandbox Code Playgroud)

当我知道该属性的真实类型是:

List<int>
Run Code Online (Sandbox Code Playgroud)

我能看到的唯一解决方案是进行硬编码开关,该开关使用list属性的通用参数的类型并创建类型安全的列表。但是,最好有一个通用的解决方案。谢谢!

c# generics reflection collections casting

2
推荐指数
1
解决办法
5943
查看次数

不经过while循环不断检查端口

在程序(Java)中,我需要检查并行端口中的特定引脚.每当该引脚从逻辑0变为1(正边沿时钟)时,我必须读取端口上的数据并保存它.这种情况大约每10毫秒发生一次,但可能会有所不同.

为了做到这一点,我用一个不断检查端口的while循环创建了一个单独的线程,但这使得处理器变得疯狂,我知道这是因为while循环.我的问题是,如何在不使用处理器密集的while循环的情况下不断扫描端口?该程序并不准确知道何时发生引脚更改,只是它发生在每10ms左右.

java loops port-scanning

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

如何在Java中有效地跟踪光标位置?

我一直试图创建的效果是,只要鼠标进入JPanel上的某个区域,鼠标光标图标就会改变,并且只要它离开区域就会切换到默认值.我在MouseMotionListener类中使用MouseMoved功能,只要鼠标在JPanel上移动,就会验证坐标是否对应于特殊区域.

然而,这种方法对计算机处理器的压力非常大,所以我想问一下是否有更有效的方法.任何帮助表示赞赏.

该程序的作用是在JPanel上绘制图形,当选择"连接"按钮时,如果用户单击一个图形,然后在另一个图形上,则它将这些图形与一条线连接起来.

这些图形在JPanel上绘制,并且存储了各自的区域边界,因此当鼠标移动时,它会检查当前的X和Y坐标是否位于其中一个区域内,如果是,则更改光标.checkValidConnectionRegion检查当前X和Y变量是否在图的区域内.这是处理程序的代码:

public void mouseMoved(MouseEvent e)
    {
        if(GUI.Connectionbutton.isSelected())
        {
            x = e.getX();
            y = e.getY();

            checkValidConnectionRegion(); 

            if(validConnectionRegion)
                setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
            if(!validConnectionRegion)
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        }
    }
Run Code Online (Sandbox Code Playgroud)

java mouse move onmousemove

0
推荐指数
1
解决办法
5665
查看次数

ArrayList中的内容被修改

我对我正在制作的程序有疑问,说实话,我找不到解决办法.看来Java ArrayList集合中包含的对象正在被修改,而我没有编程这样的修改.

该程序作为一个整体意味着通过在路径上移动,基本上在10x10网格上的两个节点之间创建随机连接.此路径表示为网格中的ArrayList点集合,第一个索引包含第一个节点的位置(节点A),最后一个索引包含第二个节点的位置(节点B).我这样做是通过将自己定位在A的位置,然后随机移动到网格中的连续点,在while循环中重复这一点,直到达到B的位置.

一切似乎都有效,除了"路径"集合以某种方式被改变,这样它的每个点最终都与我移动的最后一个点相同,这也是B的位置.

方法如下:

public void generateRandomPath()
{
    path = new ArrayList<Point>();
    path.add(pInitial);
    complete = false;

    while(!complete)
    {
        k = path.get(path.size()-1);
        d = selectDirection(k);

        GUI.log.append("==== Before the method. ==== \n");
        GUI.log.append(Integer.toString(path.get(path.size()-1).getX())+" - "+Integer.toString(path.get(path.size()-1).getY())+"\n");

        x = move(k, d);
        path.add(x);

        if(k.getX() == pEnd.getX() && k.getY() == pEnd.getY())
            complete = true;

    }
    GUI.log.append("Finished. \n");
}
Run Code Online (Sandbox Code Playgroud)
  • " "只是点,X和Y坐标用整数表示.
  • " pInitial "是表示节点A的位置的点.
  • " pEnd "是表示节点B的位置的点.
  • " d "是我将继续这个重复的方向.这可以分别由向上,向右,向下或向左表示,分别由整数1,2,3和4表示.
  • " k "是路径中的最后一个点,也就是它在前一次重复时移动的点.
  • " x "是它在当前重复上移动的新点.

所以它基本上做的是它抓住路径中的最后一个点作为参考,选择一个方向,然后移动到该方向上连续的点.while循环的每次重复都应该为路径添加一个新.然而,最终发生的事情是,不仅添加了这个新点,而且已经在路径中的每个其他都会添加最后一个点的值.通过利用上面显示的日志条目(GUI.log.append),我设法在步骤中看到该 …

java arraylist

0
推荐指数
1
解决办法
301
查看次数