一个简单的设置时间,并用两种形式显示时间。

本文介绍了一个简单的Java程序,用于设置时间并以24小时制和12小时制两种格式展示时间。通过自定义Time1类实现了时间和格式化的设置。

一个简单的设置时间,并用两种形式显示时间。

import javax.swing.*;
import java.text.DecimalFormat;
public class TimeTest {
    public static void main(String args[]){
        Time1 time = new Time1();
        String output="The initial universal time is: "+time.toStandardString();
        time.setTime(13,27,6);
        output+="\n\nUniversal time after setTime is: "+time.toUniversalString()+"\nStandrad time after setTime is: "+time.toStandardString();
        JOptionPane.showMessageDialog(null,output,"Testing Class Timel",JOptionPane.INFORMATION_MESSAGE );

        System.exit(0);

    }
}

import java.text.DecimalFormat;

/**
 * Created by End on 15/12/12.
 */
public class Time1 extends Object{
    private int hour ;
    private int minute;
    private int second;

    public Time1(){
        setTime(0,0,0);
    }

    public void setTime(int hour,int minute,int second){
        this.hour=((hour>=0&&hour<24)?hour:0);
        this.minute=((minute>=0&&minute<60)?minute:0);
        this.second=((second>=0&&second<60)?second:0);
    }

    public String toUniversalString(){
        DecimalFormat twoDigits=new DecimalFormat("00");

        return twoDigits.format(hour)+":"+twoDigits.format(minute)+":"+twoDigits.format(second);
    }

    public String toStandardString(){
        DecimalFormat twoDigits=new DecimalFormat("00");

        return ((hour==12||hour==0)? 12: hour % 12) + ":" + twoDigits.format(minute)+":"+twoDigits.format(second)+(hour<12?"AM":"PM");
    }
}

这里写图片描述

<think>我们有两个列表,需要找出它们的共同元素(相同项)并输出。根据引用[2]引用[3],我们可以使用集合的交集运算来实现,因为集合可以快速找出两个集合中共同存在的元素。步骤:1.将两个列表转换为集合(set)。2.使用集合的intersection方法,或者使用`&`运算符,得到两个集合的交集,即共同元素。3.将交集转换回列表(如果需要列表形式)或者直接遍历输出。注意:集合是无序且不重复的,因此结果中的元素不会重复,并且顺序可能会被打乱。如果希望保持原列表的顺序(按照其中一个列表的顺序输出共同元素),我们可以使用列表推导式(引用[2]中的方法一),但这样效率较低(每次使用in操作会遍历整个另一个列表)。但是,如果使用集合来优化成员检查,我们可以提高效率(引用[1]的方法)。因此,我们可以:先将第二个列表转换为集合(这样在检查成员时时间复杂度为O(1))然后遍历第一个列表,检查每个元素是否在第二个集合中,这样就可以保持第一个列表的顺序,同时高效地找出共同元素。两种方法:方法1(无序,高效):直接用集合的交集。方法2(有序,相对高效):通过遍历第一个列表并用集合检查。下面分别实现。示例列表:list1=[1,2,3,4]list2=[3,5,6,7]方法1:使用集合common=set(list1)&set(list2)注意:这样得到的common是一个集合,其元素是共同元素,但顺序可能不是原来的顺序。方法2:保持list1中的顺序set2=set(list2)common=[xforxinlist1ifxinset2]现在我们要输出这些相同元素,我们可以选择任意一种方式。另外,如果两个列表没有相同元素,我们可能还需要输出提示信息。实现:首先检查两个列表是否有共同元素(即交集是否非空),然后输出共同元素。我们可以先使用方法2,因为通常我们可能需要保持顺序。代码步骤:1.将list2转化为集合set22.用列表推导式,遍历list1,把在set2中出现的元素收集起来,这样得到的有序列表就是list1中那些也存在于list2的元素,并且顺序与list1中出现的顺序一致。3.如果得到的共同元素列表不为空,则输出;否则输出提示没有共同元素。或者,我们也可以先使用方法1得到集合,如果集合非空则输出,否则提示。但是,如果我们希望保持顺序,就使用方法2。下面给出两种方法的代码示例,并输出共同元素。方法1:集合交集(无序)方法2:列表推导(可保持第一个列表的顺序)我们还可以选择按照第二个列表的顺序?或者按照两个列表中出现的顺序?这里按照第一个列表的顺序。我们实现两种方法,并让用户根据需要选择。不过用户问题没有要求顺序,所以我们可以默认输出无序集合,但通常用户可能期望看到有序的输出,所以我们也可以输出有序(按原列表顺序)的共同元素。问题:输出共同元素时,是否需要去重?因为集合会自动去重。我们假设两个列表本身可能有重复元素,但共同元素中我们只需要唯一值?还是需要保留重复次数?问题只是要求相同元素(共同项),我们默认相同元素只输出一次。如果用户需要重复元素也要考虑,那么应该用其他方法(例如计数),但题目没有要求。因此,我们使用集合来得到共同元素(不重复)。但是,如果两个列表中都存在重复元素,比如list1=[1,1,2,3],list2=[1,1,4],那么共同元素是1,输出一次即可。如果用户需要统计重复次数,那问题就变成找出两个列表中重复元素的次数,这里不涉及。因此,我们按照以下步骤:方法1(无序):common_set=set(list1)&set(list2)ifcommon_set:print("两个列表的相同元素有:",common_set)else:print("两个列表没有相同元素")方法2(保持顺序,但不重复):set2=set(list2)common_list=[]foriteminlist1:ifiteminset2anditemnotincommon_list:#这样确保不重复common_list.append(item)然后输出common_list但是注意,方法2中我们通过判断`itemnotincommon_list`来去重,这样效率较低(每次判断要遍历common_list)。所以另一种做法是先收集所有在set2中的元素(不去重),然后去重但保持顺序(可以用字典的键或collections.OrderedDict)?但是这样会保留原list1中重复的次数吗?不,我们只输出一次,所以可以直接用上面的方法。但是,如果list1本身有重复,我们希望输出每个重复元素一次,那么我们可以用一个集合记录已经添加的元素。改进方法2:set2=set(list2)seen=set()common_list=[]foriteminlist1:ifiteminset2anditemnotinseen:common_list.append(item)seen.add(item)这样在遍历过程中记录了已经出现过的元素,保证只添加一次,同时保持了在list1中第一次出现的顺序。不过,如果我们不关心顺序,方法1简单。如果关心顺序(按list1出现的顺序),那么用改进方法2。因为题目没有明确要求,我们提供两种方式。但注意:题目要求“显示这些相同项”,并没有要求顺序,所以直接使用集合交集输出集合也是可以接受的。我们选择方法1作为基础方法,并说明如果希望保持顺序则使用另一种方法。另外,引用[3]中直接使用set.intersection方法,也可以。代码示例:方法一(集合交集):```pythonlist1=[1,2,3,4]list2=[3,5,6,7]#求交集common_elements=set(list1)&set(list2)#或者set(list1).intersection(list2)ifcommon_elements:print("两个列表的相同元素有:",common_elements)else:print("两个列表没有相同元素")```方法二(保持顺序):```pythonlist1=[1,2,3,4]list2=[3,5,6,7]set2=set(list2)seen=set()common_elements=[]foriteminlist1:ifiteminset2anditemnotinseen:common_elements.append(item)seen.add(item)ifcommon_elements:print("两个列表的相同元素有(按第一个列表顺序且去重):",common_elements)else:print("两个列表没有相同元素")```注意:方法二中,如果list1中的重复元素也存在于list2,则只会被记录一次(顺序是第一次出现的位置)。但是,如果list1=[1,1,2,3],list2=[1,2,3],那么输出的是[1,2,3](因为1出现两次,但第一次添加后,第二次由于在seen中,所以不再添加)。如果我们希望按出现顺序并且保留重复,那就不去重?但是题目要求相同元素,并没有要求重复多次。所以按上面的方法。我们也可以根据需求调整,但题目没有说明。现在,我们按照用户问题,只需要输出相同元素(共同项)即可,不管出现次数顺序(因此直接使用方法一)应该是可以的。但是,用户可能希望看到顺序的输出,所以我们提供方法二作为可选。综合来看,我们给出两种方法,并说明区别。回答结构:1.介绍使用集合交集(无序)的方法2.介绍保持顺序的方法3.根据需求选择合适的方法代码示例将分别给出。另外,注意空列表的情况,上述代码已经处理了。输出相同元素,可以是直接输出集合或者列表。如果用户希望得到的共同元素也是一个列表,那么方法一得到的是集合,可以再转为列表,但顺序会丢失。方法二直接得到列表。因此,最后我们总结两种方法。</think> 要验证两个列表是否存在相同项并显示这些相同元素,可以使用以下方法(基于集合操作): ### 方法1:使用集合交集(推荐) ```python list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] # 获取交集 common = set(list1) & set(list2) # 使用交集操作符 # common = set(list1).intersection(list2) # 等价方法 if common: print("相同元素:", common) else: print("没有相同元素") ``` 📌 输出结果: ``` 相同元素: {4, 5} ``` ### 方法2:保持原始顺序输出 ```python list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] # 找出共同元素并保持list1中的顺序 common = [] seen = set(list2) # 创建哈希表加速查找 for item in list1: if item in seen and item not in common: # 避免重复 common.append(item) if common: print("相同元素:", common) else: print("没有相同元素") ``` 📌 输出结果: ``` 相同元素: [4, 5] ``` ### 方法3:列表推导式(简洁写法) ```python list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] # 找出所有共同元素 common = list({x for x in list1 if x in set(list2)}) if common: print("相同元素:", common) else: print("没有相同元素") ``` ### 关键说明: 1. **集合操作效率最高**:使用`set`的交集操作时间复杂度为$O(n+m)$,远优于嵌套循环的$O(n×m)$[^1] 2. **顺序处理**: - 集合操作会自动去重但不保持顺序 - 如需保持顺序,使用方法2的遍历法 3. **重复元素处理**: - 上述方法自动去重 - 如需保留重复项,可将第3行改为: `common = [x for x in list1 if x in set(list2)]` > ⚠️ 当处理大型数据集时(超过10万元素),强烈推荐使用方法1的集合操作以获得最佳性能[^2][^3]。 ### 典型应用场景 ```python # 检查用户权限 user_permissions = ["read", "write", "delete"] required_permissions = ["write", "execute"] if set(user_permissions) & set(required_permissions): print("权限验证通过") else: print("权限不足") # 查找共同好友 alice_friends = ["Bob", "Charlie", "David"] bob_friends = ["Charlie", "David", "Eve"] mutual = set(alice_friends) & set(bob_friends) print(f"共同好友: {', '.join(mutual)}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值