JAVA基本的编程50称号(7-9称号)详细解释
一个、叙述性说明
1、输入一行字符。在这些信件统计、空格、出现频率的数字和其他字符的总数和每一个字符。
程序分析:使用String类的matchs()分别统计符合正則表達式的每类字符的总个数,然后分别使用List和Map集合类统计每一个字符出现的频率。
2、求s=a+aa+aaa+aaaa+aa...a的值,当中a是一个数字。
比如2+22+222+2222+22222(此时共同拥有5个数相加)。几个数相加由键盘控制。
3、题目:一个数假设恰好等于它的因子之和,这个数就称为"完数",即除了本身以外的不反复因数和等于其本身。
编程找出m以内的全部完数。
比如6=1+2+3.第二个全然数是28,它有约数1、2、4、7、14、28,除去它本身28外。其余5个数相加,1+2+4+7+14=28。
首先求出全部质因数,然后推断相加和是否等于原数。
二、源码
1、程序1
package tong.yue.hong;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
/**
* 输入一行字符。分别统计出当中英文字母、空格、数字和其他字符的总个数和每一个字符出现的频率。
程序分析:使用String类的matchs()分别统计符合正則表達式的每类字符的总个数。然后分别使用List和Map集合类统计每一个字符出现的频率
* @author tong
*
*/
public class Statistics {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一行字符串:");
String string = scanner.nextLine();
scanner.close();
count(string);
System.out.println("-------------");
countEveryOneByList(string);
System.out.println("-------------");
countEveryOneByMap(string);
}
/**
* 定义几种类型字符的正則表達式,而且使用String类的matchs()方法匹配每类字符的个数
* @param str
*/
private static void count(String str){
//定义四个正則表達式分别表示各类字符
String E1 = "[\u4e00-\u9fa5]"; //汉字
String E2 = "[a-zA-Z]"; //中英文字母
String E3 = "[0-9]";
//数字
String E4 = "\\s";//空格
//分别定义五个统计变量,分别统计各类字符的总个数
int countChinese = 0;
int countLetter = 0;
int countNumber = 0;
int countSpace = 0;
int countOther = 0;
//将字符串转化为字符数组
char[] array_Char = str.toCharArray();
//由于汉字仅仅能作为字符串处理,所以定义字符串数组来存放全部字符
String[] array_String = new String[array_Char.length];
//将字符数组转换为字符串数组
for(int i=0;i<array_Char.length;i++){
array_String[i] = String.valueOf(array_Char[i]);
}
//遍历字符串数组中的元素。统计各类字符总个数
for(String s:array_String){
if(s.matches(E1))
countChinese++;
else if(s.matches(E2))
countLetter++;
else if(s.matches(E3))
countNumber++;
else if(s.matches(E4))
countSpace++;
else
countOther++;
}
System.out.println("输入的汉字个数:"+countChinese);
System.out.println("输入的字母个数:"+countLetter);
System.out.println("输入的数字个数:"+countNumber);
System.out.println("输入的空格个数:"+countSpace);
System.out.println("输入的其他字符个数:"+countSpace);
}
/**
* 使用List集合统计单个字符的个数
* @param str
*/
private static void countEveryOneByList(String str){
List<String> list = new ArrayList<String>();
char[] array_Char = str.toCharArray();
for(char c:array_Char){
//将字符作为字符串加入到list表中
list.add(String.valueOf(c));
}
//调用Collections集合工具类将list类中的数据进行排序。同样的元素就排在相邻的位置
Collections.sort(list);//排序
//遍历排序后的集合,依据同样的值在List中第一次出现的位置和最后一次出现的位置就能计算出该字符串的总个数
for(String s:list){
//该字符串第一次出现的索引
int begin = list.indexOf(s);
//该字符串最后一次出现的索引,由于同样元素相邻,就可以得出个数
int end = list.lastIndexOf(s);
//索引结束统计字符数
if(list.get(end)==s){
System.out.print("字符'"+s+"'有"+(end-begin+1)+"个");
}
}
}
/**
* 使用Map集合类统计字符串出现的次数。以该字符串作为键,以出现的次数作为值,循环遍历就可以
* @param str
*/
private static void countEveryOneByMap(String str){
//创建HashMap对象来存放字符串数组及其出现的次数
Map<String,Integer> hashMap = new HashMap<String,Integer>();
char[] array_Char = str.toCharArray();
for(char c:array_Char){
String key = String.valueOf(c);
//假设已经出现过该字符串就将该字符串的value加1
if (hashMap.containsKey(key)) {
Integer value = hashMap.get(key)+1;
hashMap.put(key, value);
}else {
//假设该字符串是第一次出现。就将该字符串及其出现的次数加入到hashMap中
hashMap.put(key, 1);
}
}
//遍历hashMap集合,输出结果
Set<Map.Entry<String, Integer>> sets = hashMap.entrySet();
for (Map.Entry<String, Integer> mapEntry :sets) {
System.out.println("字符'"+mapEntry.getKey()+"'有"+mapEntry.getValue()+"个");
}
}
}
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG9uZ3l1ZWhvbmcxMzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="统计字符个数">
2、程序2
package tong.yue.hong;
import java.util.Scanner;
import javax.xml.transform.Templates;
/**
* 题目:求s=a+aa+aaa+aaaa+aa...a的值,当中a是一个数字。
* 比如2+22+222+2222+22222,由键盘控制相加的次数,输入多少个数据进行相加
* @author tong
*
*/
public class SumOneNum {
public static void main(String[] args) {
String E3 = "[0-9]";
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个0-9的数字:");
String num = scanner.next();
while (!num.matches(E3)) {
System.out.println("您输入的数字有误。请又一次输入:");
num = scanner.next();
}
System.out.println("请输入要相加的数据个数:");
String times = scanner.next();
while (!times.matches(E3)) {
System.out.println("您输入的数字有误,请又一次输入:");
times = scanner.next();
}
scanner.close();
//方法1直接是依据字符串拼接规律和数字变化规律相加求和
mulAdd(num,times);
//方法2使用StringBuffer进行前面显示的字符串的拼接。用add方法将数字累加
System.out.println(expressed(num,times)+add(num,times));
}
/**
* 确定源数据的变化规律,依据规律number =number*10+number%10进行变化。并更加相加次数进行相加
* @param num
* @param times
*/
private static void mulAdd(String num, String times) {
//String转换为int
int number = Integer.parseInt(num);
long sum = 0;
int temp = 0;
for (int i = 1; i <= Integer.parseInt(times); i++) {
//数据每次变化的规律
temp =temp*10+number;
sum +=temp;
//若为不是最后一次相加,就输出加号
if (i<Integer.parseInt(times)) {
System.out.print(temp+"+");
}else {
System.out.print(temp+"=");
}
}
System.out.println(sum);
}
//用StringBuffer输出前面的数字连续相乘的字符串表达式
private static String expressed(String num,String times){
StringBuffer sb = new StringBuffer();
StringBuffer subSB = new StringBuffer();
for(int i=1;i<=Integer.parseInt(times);i++){
subSB = subSB.append(num);
sb = sb.append(subSB);
if(i<Integer.parseInt(times))
sb = sb.append("+");
}
sb.append("=");
return sb.toString();
}
//输出连续数字累加和
private static long add(String num,String times){
Integer a = Integer.parseInt(num);
long sum = 0;
long subSUM = 0;
for(int i=1;i<=Integer.parseInt(times);i++){
subSUM = subSUM*10+a;
sum = sum+subSUM;
}
return sum;
}
}
执行结果:
3、程序3
package tong.yue.hong;
import java.util.Scanner;
/*
* 题目:一个数假设恰好等于它的因子之和,这个数就称为"完数",即除了本身以外的不反复因数和等于其本身。编程找出m以内的全部完数。
* 比如6=1+2+3.第二个全然数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
* 首先求出全部质因数,然后推断相加和是否等于原数
*/
public class NumberSpec {
public static void main(String[] args) {
System.out.println("请输入一个大于0小于等于10000的正整数表示完数的范围(>0):");
Scanner scanner = new Scanner(System.in);
int scale = scanner.nextInt();
while (scale<0||scale>10000) {
System.out.println("您的输入有误。请又一次输入一个大于0小于等于10000的正整数表示完数的范围(>0):");
scale = scanner.nextInt();
}
compNumber(scale);
}
private static void compNumber(int n){
System.out.println(n+"以内的完数:");
for(int i=1;i<=n;i++){
int sum = 0;
for(int j=1;j<i/2+1;j++){
if((i%j)==0){
sum += j;
}
}
if(sum==i){
System.out.print(i+" ");
}
}
}
}
执行结果:
版权声明:本文博客原创文章,博客,未经同意,不得转载。
JAVA基本的编程50称号(7-9称号)详细解释的更多相关文章
- Classpath in jar关于java加载第三方jar的集中方法和详细解释。
转载地址:http://www.iteye.com/topic/332580 大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个ja ...
- Java经典逻辑编程50题
Java经典逻辑编程50题 2016-11-03 09:29:28 0个评论 来源:Alias_fa的博客 收藏 我要投稿 [程序1] 題目:古典问题:有一对兔子,从出生后第 ...
- JAVA的网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- 【转】JAVA之网络编程
转自:火之光 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者 ...
- JAVA的网络编程【转】
JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...
- 点评阿里JAVA手册之编程规约(OOP 规约 、集合处理 、并发处理 、其他)
下载原版阿里JAVA开发手册 [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文难度系数为三星(★★★) 本文为第二篇 第一篇 点评阿里JAVA手 ...
- 【Socket】Java Socket基础编程
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- Java 多线程并发编程一览笔录
Java 多线程并发编程一览笔录 知识体系图: 1.线程是什么? 线程是进程中独立运行的子任务. 2.创建线程的方式 方式一:将类声明为 Thread 的子类.该子类应重写 Thread 类的 run ...
- java基础—GUI编程(一)
一.AWT介绍
随机推荐
- ThreadPoolExecutor的一点理解
整个ThreadPoolExecutor的任务处理有4步操作: 第一步,初始的poolSize < corePoolSize,提交的runnable任务,会直接做为new一个Thread的参数, ...
- Java Web系列:Spring Boot 基础 (转)
Spring Boot 项目(参考1) 提供了一个类似ASP.NET MVC的默认模板一样的标准样板,直接集成了一系列的组件并使用了默认的配置.使用Spring Boot 不会降低学习成本,甚至增加了 ...
- HDU 3313 Key Vertex(dfs + bfs)
HDU 3313 Key Vertex 题目链接 题意:一个有向无环图.求s,t之间的割点 思路:先spfa找一条最短路出来,假设不存在.就n个都是割点. 然后每次从s进行dfs,找到能经过最短路上的 ...
- Cache
在选择的几点思考
Cache为缓解DB装有重要数据,下面经常使用memcached和redis要总结,促进技术的选择. 1 memcached (1) 有限支持的操作,持经常使用的set.get.delete和过期删 ...
- 使用eclips发展java当闪回的问题
近期開始android的开发学习.当然要先从java入手了.我选择eclips作为开发的IDE,在測试java代码例子时,假设我的代码是能够出现系统自己主动代码补齐时eclips就会立马闪退. 刚開始 ...
- atitit.无损传输二进制数据串传输网络
atitit.无损传输二进制数据串传输网络 1. gbk的网络传输问题,为什么gbk不能使用来传输二进制数据 1 2. base64 2 3. iso-8859-1 (推荐) 2 4. utf-8 ...
- Windows台cocos2d-x 3.2下载一个新的项目,创造的过程
首先,左右cocos2d-x于windows下一个Android建筑环境, 引用一个网友这个博客<cocos2d-x 3.0rc开发指南:Windows下Android环境搭建>. 这里简 ...
- 【 Android官方文件读书笔记】连接网络
一间连接应用网络的主要功能.Android系统对网络连接进行了封装,使得开发人员可以更快的给应用添加网络功能.大多数网络连接的Android应用使用HTTP发送和接受数据.Android包含两个HTT ...
- ASP.NET Identity 身份验证和基于角色的授权
ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...
- python有些错误换行问题解决
有时候数据会遇到一些错误包.例如,正确的数据应: 20141010,aaa,bbb,ccc,ddd,eee 但实际的数据是来: 20141010,aaa,bbb, ccc,ddd, eee 这样出现错 ...