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.
boolean | containsKey(Object key) 如果此映射包含对于指定键的映射关系,则返回 true。 |
2.TreeMap和HashMap区别
TreeMap | HashMap |
---|---|
基于红黑二叉树的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()