题库练习3(质因子、取近似值、合并表记录)

1. 质因子

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )

最后一个数后面也要有空格

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        long num=sc.nextLong();
        System.out.println(new Main().getFactor(num)+" ");
    }
    
    public String getFactor(long num){
        String string="";
        if(num==0||num==1||num==2||num==3)
            return num+" ";
        int i=2;
        while(i*i<=num){
            if(num%i==0){
                string+=i+" ";
                num/=i;
                i=1;
            }
            i++;
        }
        return string+num;
    }
}

2.  取近似值

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        float f=sc.nextFloat();
        String str=f+"";
        int i=str.indexOf(".");
        char[] chs=str.toCharArray();
        long num=Long.valueOf(str.substring(0,i)).longValue();
        if(chs[i+1]-'5'>=0)
            num+=1;
        System.out.println(num);
    }
}

注:

1.int转换为String

比如int a=1;让String str=a+"";

2.String转换为int

Integer.valueOf(String str).intValue();

3. 合并表记录

数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

import java.util.Scanner;
import java.util.Map;
import java.util.TreeMap;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        
        int n=Integer.valueOf(sc.nextLine()).intValue();
        int i=0;
        Map<Integer,Integer> map=new TreeMap<Integer,Integer>();
        
        while(i<n){
            String[] strs=sc.nextLine().split(" ");
            int key=Integer.valueOf(strs[0]).intValue();
            int value=Integer.valueOf(strs[1]).intValue();
            if(map.containsKey(key)){
                map.put(key,value+map.get(key));
            }
            else
                map.put(key,value);
            i++;
        }
        for(int key:map.keySet()){
            System.out.println(key+" "+map.get(key));
        }
    }
}

注:

1.

booleancontainsKey(Object key)
          如果此映射包含对于指定键的映射关系,则返回 true。

2.TreeMap和HashMap区别

TreeMapHashMap
基于红黑二叉树的NavigableMap的实现数组方式存储key/value
线程非安全线程非安全
不允许null允许null作为key和value
key不可以重复,value允许重复key不可以重复,value允许重复
存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,两个相比较的key不得抛出classCastException不保证元素迭代顺序是按照插入时的顺序
主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法

HashMap:默认初始容量16,加载因子0.75,扩容为旧容量乘2,查找元素快,如果key一样则比较value,如果value不一样,则按照链表结构存储value,就是一个key后面有多个value;

3. Map遍历

public static void main(String[] args) {
  Map<String,String> map=new HashMap<String,String>();
        map.put("1", "value1");
        map.put("2", "value2");
        map.put("3", "value3");
        map.put("4", "value4");
        
        //第一种:普通使用,二次取值
        System.out.println("\n通过Map.keySet遍历key和value:");  
        for(String key:map.keySet())
        {
         System.out.println("Key: "+key+" Value: "+map.get(key));
        }
        
        //第二种
        System.out.println("\n通过Map.entrySet使用iterator遍历key和value: ");  
        Iterator map1it=map.entrySet().iterator();
        while(map1it.hasNext())
        {
         Map.Entry<String, String> entry=(Entry<String, String>) map1it.next();
         System.out.println("Key: "+entry.getKey()+" Value: "+entry.getValue());
        }
        
        //第三种:推荐,尤其是容量大时  
        System.out.println("\n通过Map.entrySet遍历key和value");  
        for(Map.Entry<String, String> entry: map.entrySet())
        {
         System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
        }
        
        //第四种  
        System.out.println("\n通过Map.values()遍历所有的value,但不能遍历key");  
        for(String v:map.values())
        {
         System.out.println("The value is "+v);
        }
 }

3. Map的存取

put()

get()

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值