小编Joh*_*ers的帖子

只有2个参数的递归二进制搜索方法

好的,这是一个学校作业.我在进行递归二进制搜索时没有遇到任何问题,但是赋值明确指出该方法应该只接受2个参数,列表和您要搜索的项目.这是我有点失落的地方.

public int binarySearch(List<Card> cards, Card key)
{
    int mid = (cards.size()) / 2;
    if(cards.size() == 1) {
        if(key.equals(cards.get(0))) {
            return 0;
        }
    }
    else {
        if(key.equals(cards.get(mid))) {
            return mid;
        }
        else if(key.compareTo(cards.get(mid)) == - 1) {
            return binarySearch(cards.subList(0, mid), key);
        }
        else if(key.compareTo(cards.get(mid)) ==  1) {
            return mid + 1 + binarySearch(cards.subList(mid + 1, cards.size()), key);
        }
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

所以这将工作正常,除非我正在搜索不存在的东西,它属于列表的上半部分.因为我只传递2个参数,所以我必须用每个递归调用更改列表,但是,如果它在上半部分我不能丢失我的索引点,所以我必须在那里添加递归调用,如果它最终不在上半部分然后它返回-1 +我之前考虑的所有那些索引.有没有办法可以清除它并使其返回-1?任何建议表示赞赏.

java recursion binary-search

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

更新JMenu显示名称

所以我有一个带有几个子菜单的JMenu.这些菜单的名称是通过获取4个玩家中的1个的名称来设置的.我向JMenu添加了一个MenuListener来使用更新这些名称

menu.setName(player.getName()); 
Run Code Online (Sandbox Code Playgroud)

但是,名称正在更改,但更新未显示在菜单中.如何让菜单更新它的显示?

editMenu.addMenuListener(new MenuListener() {

       public void menuSelected(MenuEvent e) {
          updateMenu();       
       }

       public void menuDeselected(MenuEvent e) {
       }

       public void menuCanceled(MenuEvent e) {
       } 
});
Run Code Online (Sandbox Code Playgroud)

和updateMenu方法:

public void updateMenu()
{
    partOneMenu.setName(Participant1.getName());
    partTwoMenu.setName(Participant2.getName());
    partThreeMenu.setName(Participant3.getName());
    partFourMenu.setName(Participant4.getName());

    partOneMenu.revalidate();

    partTwoMenu.revalidate();
    partThreeMenu.revalidate();
    partFourMenu.revalidate();

    System.out.println(partOneMenu.getName());
}
Run Code Online (Sandbox Code Playgroud)

print语句显示名称已更改.

java user-interface swing model

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

Liferay portlet中没有编辑模式

我正在关注Liferay In Action书.我正处于将编辑模式添加到portlet的部分.portlet已成功部署,我已添加了portlet,现在该书说要单击portlet中的扳手并单击Preferences链接,但我没有Preferences链接.查看工作正常.

这是我的portlet.xml:

<?xml version="1.0"?>

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
<portlet>
    <portlet-name>hello-john</portlet-name>
    <display-name>Hello John</display-name>
    <portlet-class>com.liferaytest.portlet.HelloJohnPortlet</portlet-class>
    <init-param>
        <name>view-jsp</name>
        <value>/view.jsp</value>
    </init-param>
    <init-param>
        <name>edit-jsp</name>
        <value>/edit.jsp</value>
    </init-param>
    <expiration-cache>0</expiration-cache>
    <supports>
        <mime-type>text/html</mime-type>
        <portlet-mode>view</portlet-mode>
        <portlet-mode>edit</portlet-mode>
    </supports>
    <portlet-info>
        <title>Hello John</title>
        <short-title>Hello John</short-title>
        <keywords>Hello John</keywords>
    </portlet-info>
    <security-role-ref>
        <role-name>administrator</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>guest</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>power-user</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>user</role-name>
    </security-role-ref>
</portlet>
Run Code Online (Sandbox Code Playgroud)

我的edit.jsp:

<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>

<jsp:useBean class="java.lang.String" id="addNameURL" scope="request" />

<portlet:defineObjects />

<form 
id ="<portlet:namespace />helloForm" 
action="<%= addNameURL %>" 
method="post">
<table>
    <tr>
        <td>Name:</td> …
Run Code Online (Sandbox Code Playgroud)

java portlet liferay

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