A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 神之梦   /  2013-7-7 15:02  /  9970 人查看  /  182 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

白天没时间在上课没时间上网.晚上加班加点搞出来.望楼主见谅啊! 第三题文件名没改出来.不过新加了一个功能可以复制自定义后缀的文件.
  1. /**
  2.       题目3、在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
  3.      要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
  4.     (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
  5. */
  6. package test;

  7. import java.io.File;
  8. import java.io.FileReader;
  9. import java.io.FileWriter;
  10. import java.util.Scanner;
  11. class Exam {
  12.         public static void main(String[] args) {
  13.                 Scanner s = new Scanner(System.in);
  14.                 System.out.println("复制文件的目录(去掉结尾的两个\\否则运行失败):");
  15.                 String sourcePath = s.next();
  16.                 System.out.println("源目录路径字符的个数.(如d:\\demo有7个字符 ,就输入7 ).请输入:");
  17.                 int count = s.nextInt();
  18.                 System.out.println("文件存储的目录(去掉结尾的两个\\否则运行失败):");
  19.                 String storePath = s.next();
  20.                 System.out.println("要复制的文件后缀名(如.java)");
  21.                 String layout = s.next();
  22.                
  23.                 File f = new File(sourcePath);//创建一个文件夹对象
  24.                
  25.                 reCopy(f, sourcePath,count,storePath,layout);//
  26.         }
  27.        


  28.         /**
  29.         @param f 接收一个文件夹对象
  30.         @param sourcePath  被复制文件的路径.(去掉结尾的两个\否则运行失败)
  31.         @param storePath        复制目的目录(去掉结尾的两个\否则运行失败)
  32.         @param count                源目录路径字符的个数.(如d:\demo有7个字符 ,就输入7 )
  33.         @param layout                要复制的文件后缀名
  34.         */
  35.         public static void reCopy(File f, String sourcePath, int count,
  36.                                                                 String storePath,String layout) {
  37.                 //Copy c = new Copy();

  38.                 File[] st = f.listFiles();//创建一个抽象路径名数组,存储文件对象
  39.                 for (int i = 0; i < st.length; i++) {
  40.                         //判断如果是文件就复制.文件夹跳过不操作
  41.                         if(st[i].isFile()) {
  42.                                 String s =st[i]+"";
  43.                                 String fileName = s.substring(count);//提取要文件名
  44.                                 if(fileName.endsWith(layout)) {
  45.                                         System.out.println(fileName);
  46.                                         copyFile(sourcePath ,fileName, storePath);
  47.                                 }
  48.                                 //用字符流传输(FileReader)
  49.                         }
  50.                 }       
  51.         }
  52.        
  53.        
  54.         //复制一个文件到另外一个文件夹
  55.         public static void copyFile(String sourcePath, String fileName,String storePath) {
  56.        
  57.         FileReader fr = null;
  58.         FileWriter fw = null;
  59.     int c = 0;
  60.         try {
  61.                 //创建输入流
  62.                 fr = new FileReader(sourcePath+"\\"+fileName);
  63.                 //创建输出流
  64.                 fw = new FileWriter(storePath+"\\"+fileName);
  65.                 //输入流直接存进输出流达到文件传输
  66.                 while ( (c = fr.read()) != -1) {
  67.                         fw.write(c);

  68.                 }
  69.                 fw.flush(); // 强制刷新流
  70.                        
  71.                 } catch(Exception e) {
  72.                         e.printStackTrace();
  73.                
  74.                 }finally {
  75.                         try {
  76.                                 //关闭流
  77.                                 fr.close();
  78.                                 fw.close();//
  79.                                 System.out.println("已经成功复制文件");
  80.                         }catch(Exception e){}
  81.                 }
  82.         }
  83. }
复制代码

小Q截图-20130709014005.png (17.89 KB, 下载次数: 0)

.java文件复制

.java文件复制

小Q截图-20130709014246.png (14.67 KB, 下载次数: 0)

.class复制

.class复制

小Q截图-20130709014439.png (6.33 KB, 下载次数: 0)

源目录

源目录

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2 下次注意时间...

查看全部评分

回复 使用道具 举报
  1. /*
  2. *题目:
  3. *1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  4. */
  5. import java.util.Scanner;//分解质因数
  6. public class fenjiezys {
  7. public static void main(String[] args) {
  8. System.out.println("输入所求数:");
  9. Scanner r = new Scanner(System.in);
  10. long n = r.nextLong();

  11. int flag = 0;
  12. for(long i=2; i<=n; i++){
  13. if (n%i == 0) {
  14. flag++;
  15. if(flag == 1){
  16. System.out.print(n+"="+i);
  17. }
  18. else
  19. {
  20. System.out.print("×"+i);
  21. }
  22. n = n/i;
  23. i--;
  24. }
  25. }
  26. if (flag == 0) {
  27. System.out.println(n+" 为质数");
  28. }
  29. else
  30. {
  31. System.out.println(" 共有"+flag+"个质因数"); }
  32. }
  33. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2 排版下次弄好点

查看全部评分

回复 使用道具 举报
刘张朋 发表于 2013-7-8 15:04
抱着试试看的态度做了下,勉强做了第二、三题,不知道是否符合要求,但是对复习巩固确实很有效。第一题还是 ...

可能是贴进去的时候什么地方弄错了
  1. package com.itheima;

  2. import java.io.*;
  3. import java.util.ArrayList;
  4. import java.util.Random;

  5. /*思路:
  6. * 第二题:求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  7. * 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  8. * 1.求1到100之间的素数,首先应该有一个判断某数是否为素数的方法。
  9. * 2.因为素数的个数n不确定,而要将其存放于数组,但是数组长度是固定的,如直接定义数组,
  10. * 其长度无法准确定义,但是想到集合是可变长度的,且ArrayList可转换为数组,故使用
  11. * ArrayList先存放数组元素,再转换为int数组。
  12. * 3.要在素数数组中随机插入一个素数,可使用ArrayList的add(int index, E element) 方法,
  13. * 其添加位置index有Random类随机产生。而添加的素数由手动键盘输入。
  14. * 4.查找相同的那个素数可由两个for语句嵌套遍历数组得到。

  15. */

  16. public class TestTwo {

  17. /**
  18. * @param args
  19. * @throws Exception
  20. */
  21. public static void main(String[] args) throws Exception {

  22. //调用getPrimeToList方法。得到素数对应Integer组成的ArrayList集合
  23. ArrayList<Integer> al = primeToList();
  24. //调用listToArray(ArrayList<Integer> al)方法,将al转换成int[];
  25. int[] arr = listToArray(al);//如输入的不是数字,会产生异常
  26. String prime = getAlikeEle(arr);
  27. System.out.println(prime);

  28. }
  29. //获取相同的素数,
  30. public static String getAlikeEle(int[] arr){
  31. for(int x=0;x<arr.length-2;x++){
  32. for(int y=x+1;y<arr.length-1;y++){
  33. if(arr[x]==arr[y])
  34. return "相同的素数"+arr[x]+"位于素数表的"+x+"位置和"+y;
  35. //该处的素数表值得是按从小到大排列的100以内的素数表
  36. }
  37. }
  38. return -1+"";
  39. }

  40. //在ArrayList集合中随机插入录入的素数,并返回一个Object数组
  41. public static int[] listToArray(ArrayList<Integer> al)throws Exception{
  42. //产生一个位于在al角标内的随机数,用于指定素数插入的位置
  43. int r = new Random().nextInt(al.size()-1);

  44. //创建键盘输入流,读取键盘录入的素数的字符串表示形式。
  45. BufferedReader bufr =
  46. new BufferedReader(new InputStreamReader(System.in));

  47. //读取键盘录入,去除两端空格。
  48. String line = bufr.readLine().trim();
  49. //如果输入为null,或者不是纯数字,报异常
  50. if((line==null) && (line.matches("\\d{1,3}")))
  51. throw new RuntimeException("输入的不是数字");
  52. //将int类型的字符串转换为Integer对象
  53. Integer insertPrime = Integer.valueOf(line);

  54. //判断输入的数字是否为1到100间的素数,如不是直接报异常
  55. int a = insertPrime;
  56. if(a<1 || a>100 || !(TestTwo.isPrime(a)))
  57. throw new RuntimeException("输入的素数不是1到100间的素数,请核准后输入");


  58. //将输入的素数随机插入al集合中
  59. al.add(r, insertPrime);

  60. //遍历Object[]将其转换为int数组
  61. int[] arr = new int[al.size()];
  62. for(int i=0;i<al.size();i++){
  63. arr[i] = al.get(i);
  64. }
  65. return arr;
  66. }


  67. //获取1到100内的素数,并存放到一个ArrayList集合中
  68. public static ArrayList<Integer> primeToList(){

  69. //创建ArrayList,并加范型,只允许存入Integer类型的对象
  70. ArrayList<Integer> al = new ArrayList<Integer>();
  71. for(int x=2;x<100;x++){ //因1和100都不是素数,故不作判断
  72. if(TestTwo.isPrime(x))
  73. al.add(x); //自动装箱,x封装为Integer
  74. }
  75. if(al.size()==0)
  76. return null; //如果al为null,表示1到100之间无素数
  77. return al;
  78. }

  79. /*判断一个数是否为素数的方法
  80. *参考素数判定的“埃拉托斯特尼筛法”,检查一个正整数N是否为素数,
  81. *最简单的方法就是试除法,将该数N用小于等于根号N的所有素数去试除,若均无法整除,则N为素数
  82. */
  83. public static boolean isPrime(int num){
  84. if(num<=1)
  85. return false; //1不是素数,负数不考虑

  86. int x = (int) Math.ceil(Math.sqrt(num));
  87. for(int i=2;i<=x;i++){
  88. if(num%i==0)
  89. return false; //num有1和其本身以外的因子,故不是素数
  90. }
  91. return true; //num没有1和其本身以外的因子,故不是素数
  92. }
  93. }
复制代码
回复 使用道具 举报
刘张朋 发表于 2013-7-9 08:39
可能是贴进去的时候什么地方弄错了

我错了,以前的代码的60行和61行,在测试时如果直接按enter或者输入字母不是按我想的那样执行的,下面是修改后的代码,[code]package com.itheima;

import java.io.*;
import java.util.ArrayList;
import java.util.Random;

/*思路:
* 第二题:求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
* 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
* 1.求1到100之间的素数,首先应该有一个判断某数是否为素数的方法。
* 2.因为素数的个数n不确定,而要将其
回复 使用道具 举报
刘张朋 发表于 2013-7-9 08:39
可能是贴进去的时候什么地方弄错了

我错了,以前代码在60行和61的,如果直接按enter和输入字母不是按我想的那样执行的,下面是修改后的代码:
  1. package com.itheima;

  2. import java.io.*;
  3. import java.util.ArrayList;
  4. import java.util.Random;

  5. /*思路:
  6. * 第二题:求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  7. * 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  8. * 1.求1到100之间的素数,首先应该有一个判断某数是否为素数的方法。
  9. * 2.因为素数的个数n不确定,而要将其存放于数组,但是数组长度是固定的,如直接定义数组,
  10. * 其长度无法准确定义,但是想到集合是可变长度的,且ArrayList可转换为数组,故使用
  11. * ArrayList先存放数组元素,再转换为int数组。
  12. * 3.要在素数数组中随机插入一个素数,可使用ArrayList的add(int index, E element) 方法,
  13. * 其添加位置index有Random类随机产生。而添加的素数由手动键盘输入。
  14. * 4.查找相同的那个素数可由两个for语句嵌套遍历数组得到。

  15. */

  16. public class TestTwo {

  17. /**
  18. * @param args
  19. * @throws Exception
  20. */
  21. public static void main(String[] args) throws Exception {

  22. //调用getPrimeToList方法。得到素数对应Integer组成的ArrayList集合
  23. ArrayList<Integer> al = primeToList();
  24. //调用listToArray(ArrayList<Integer> al)方法,将al转换成int[];
  25. int[] arr = listToArray(al);//如输入的不是数字,会产生异常
  26. String prime = getAlikeEle(arr);
  27. System.out.println(prime);

  28. }
  29. //获取相同的素数,
  30. public static String getAlikeEle(int[] arr){
  31. for(int x=0;x<arr.length-2;x++){
  32. for(int y=x+1;y<arr.length-1;y++){
  33. if(arr[x]==arr[y])
  34. return "相同的素数"+arr[x]+"位于素数表的"+x+"位置和"+y;
  35. //该处的素数表值得是按从小到大排列的100以内的素数表
  36. }
  37. }
  38. return -1+"";
  39. }

  40. //在ArrayList集合中随机插入录入的素数,并返回一个Object数组
  41. public static int[] listToArray(ArrayList<Integer> al)throws Exception{
  42. //产生一个位于在al角标内的随机数,用于指定素数插入的位置
  43. int r = new Random().nextInt(al.size()-1);

  44. //创建键盘输入流,读取键盘录入的素数的字符串表示形式。
  45. BufferedReader bufr =
  46. new BufferedReader(new InputStreamReader(System.in));

  47. //读取键盘录入,去除两端空格。
  48. String line = bufr.readLine().trim();
  49. //如果输入为null,或者不是纯数字,报异常
  50. if((line=="") ||! (line.matches("\\d{1,3}")))
  51. throw new RuntimeException("输入的不是数字");
  52. //将int类型的字符串转换为Integer对象
  53. Integer insertPrime = Integer.valueOf(line);

  54. //判断输入的数字是否为1到100间的素数,如不是直接报异常
  55. int a = insertPrime;
  56. if(a<1 || a>100 || !(TestTwo.isPrime(a)))
  57. throw new RuntimeException("输入的素数不是1到100间的素数,请核准后输入");


  58. //将输入的素数随机插入al集合中
  59. al.add(r, insertPrime);

  60. //遍历Object[]将其转换为int数组
  61. int[] arr = new int[al.size()];
  62. for(int i=0;i<al.size();i++){
  63. arr[i] = al.get(i);
  64. }
  65. return arr;
  66. }


  67. //获取1到100内的素数,并存放到一个ArrayList集合中
  68. public static ArrayList<Integer> primeToList(){

  69. //创建ArrayList,并加范型,只允许存入Integer类型的对象
  70. ArrayList<Integer> al = new ArrayList<Integer>();
  71. for(int x=2;x<100;x++){ //因1和100都不是素数,故不作判断
  72. if(TestTwo.isPrime(x))
  73. al.add(x); //自动装箱,x封装为Integer
  74. }
  75. if(al.size()==0)
  76. return null; //如果al为null,表示1到100之间无素数
  77. return al;
  78. }

  79. /*判断一个数是否为素数的方法
  80. *参考素数判定的“埃拉托斯特尼筛法”,检查一个正整数N是否为素数,
  81. *最简单的方法就是试除法,将该数N用小于等于根号N的所有素数去试除,若均无法整除,则N为素数
  82. */
  83. public static boolean isPrime(int num){
  84. if(num<=1)
  85. return false; //1不是素数,负数不考虑

  86. for(int i=2;i*i<=num;i++){
  87. if(num%i==0)
  88. return false; //num有1和其本身以外的因子,故不是素数
  89. }
  90. return true; //num没有1和其本身以外的因子,故不是素数
  91. }
  92. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2 注意代码排版

查看全部评分

回复 使用道具 举报
咦,我盗了太阳 发表于 2013-7-8 22:32
好吧,我是第一次动脑子去想一个Java问题,虽然过程有点苦逼,但是我写出来了

虽然只有素数这个。。。。

额,,,,,,,,好吧,题错了,是第二题,,,,,忘记了
回复 使用道具 举报
来做做题目~
回复 使用道具 举报
57楼发的第三题,改了半天,最后发现原来是题目看错了,按照java命名习惯,想当然的以为是要将Demo01.java改成01Demo01.java,结果原来是反过来要将01Demo.java改01Demo01.java。

对原程序做了一些修改,代码如下:

  1. /*
  2. *  题目: 在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
  3. *        要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
  4. *       (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
  5. *
  6. *  分析:首先要获取文件夹中文件名为数字+名称.java的所有文件列表。
  7. *        要实现此目标可以使用File.list(过滤器)方法,将目标文件夹定义为一个File对象,然后
  8. *        设置一个过滤器类FileFilter,过滤条件为.java结尾,并且文件名中含有数字。
  9. *        由于过滤器类仅仅创建了一个对象,并且设定的是本类的特有处理方式,不具备复用性,因此
  10. *        可以将这个FileFilter类设置为本类的匿名内部类。
  11. *        
  12. *        获得了要复制的文件列表之后,使用循环复制列表中的所有文件,调用改名方法将复制的目标文件名
  13. *        改为目标值,在改名方法中,可以使用正则表达式来获取文件名开头的数字部分,将原文件名与此
  14. *        数字部分+.java进行连接之后,即可获得新文件名。
  15. *        
  16. *        复制文件方法中,在这里使用了文件类型兼容型更强的文件输入输出流进行复制,复制的目标文件名
  17. *        为新文件名。
  18. */


  19. import java.util.Scanner;
  20. import java.io.File;
  21. import java.io.FilenameFilter;
  22. import java.io.FileInputStream;
  23. import java.io.FileOutputStream;

  24. public class Test3 {

  25.         public static void main(String[] args) {
  26.                
  27.                 //从控制台获取文件夹的绝对路径
  28.                 Scanner in = new Scanner(System.in);
  29.                 System.out.print("请输入此文件夹的绝对路径,如d:/workspaces/test/src :");
  30.                 String path = in.nextLine();
  31.                
  32.                 //将此文件夹定义为一个File对象pathFile
  33.                 File pathFile = new File(path);
  34.                
  35.                 //将过滤器类设计为了一个实现了FilenameFilter接口的匿名内部类
  36.                 //此过滤器的过滤条件为获取所有文件名必须以.java或.JAVA结尾并开头包含数字但不全为数字
  37.                 //通过调用过滤器对象,将符合条件的.java文件的文件名存入一个字符串数组list中
  38.                 String[] list = pathFile.list(new FilenameFilter(){
  39.                         @Override
  40.                         public boolean accept(File dir, String name) {
  41.                                 return name.matches("\\d+\\D+.*\\.java") || name.matches("\\d+\\D+.*\\.JAVA");
  42.                         }
  43.                 });
  44.                
  45.                 //遍历java文件清单,将其中的所有.java文件改名复制到同一个文件夹中。
  46.                 //copyFile为自定义的赋值单个文件的方法。
  47.                 //改名过程调用了自定义的getNewName方法。
  48.                 //如设定的文件夹不存在,则list为null,捕获空指针异常,并给出提示。
  49.                 try{
  50.                         for(String s : list){
  51.                                 String fullPath = path + "/" + s;
  52.                                 copyFile(fullPath, path + "/" + getNewName(s));
  53.                         }
  54.                 }catch(NullPointerException e){
  55.                         System.out.println("输入的文件夹路径有误!");
  56.                 }
  57.         }
  58.        
  59.         /**
  60.          * 此方法用于将指定的字符串结尾处的数字连接到原文件名的开始,生成新的字符串
  61.          * @param name 要处理的原字符串
  62.          * @return 返回处理后的字符串
  63.          */
  64.         private static String getNewName(String name){
  65.                 //获取文件名中的数字
  66.                 String[] numArr = name.split("\\D+");
  67.                 //去除文件名中的java后缀
  68.                 String[] strArr = name.split("\\.java|\\.JAVA");
  69.                 //strArr[0]为去除后缀的文件名,numArr[0]为文件名开头的数字,最后再加上.java后缀
  70.                 return strArr[0] + numArr[0] + ".java";
  71.         }

  72.         /**        
  73.          * 此方法用于复制单个文件
  74.          * @param oldPath 原文件路径
  75.          * @param newPath 复制后路径         
  76.          */      
  77.         public static void copyFile(String oldPath, String newPath) {
  78.                 try {
  79.                         File newFile = new File(newPath);
  80.                         if(newFile.exists()){
  81.                                 System.out.println(newPath + "已存在,跳过复制");
  82.                                 return;
  83.                         }
  84.                        
  85.                         //设置文件输入输出流
  86.                         FileInputStream in = new FileInputStream(oldPath);         
  87.                         FileOutputStream out = new FileOutputStream(newPath);
  88.                        
  89.                         //1kb的byte数组
  90.                         byte[] buffer = new byte[1024];
  91.                         //循环读取数据,直至读空位置
  92.                         while ( (in.read(buffer)) != -1) {
  93.                                 out.write(buffer);
  94.                         }
  95.                         //关闭流
  96.                         out.close();
  97.                         in.close();
  98.                 }catch (Exception e) {              
  99.                         System.out.println("复制文件过程中出错");
  100.                         e.printStackTrace();
  101.                 }
  102.         }
  103. }
复制代码
修改的地方:
1. 过滤器肯定是要改的,过滤条件改成了数字开头且不全为数字的.java或.JAVA文件。之前报数组越界应该是因为题目看错所以没考虑数字开头的java文件。
2.复制时添加了捕获空指针异常,这样在用户的文件夹路径输入错误时可以给出提示。
3.获取新名字的方法相应的也要改正,将文件名去除后缀 + 文件名开头的数字 + .java后缀。
4.在文件复制的方法中,添加了文件存在判断,当改名后的文件存在时跳过复制并给出提示,否则就把复制的内容添加到这个已存在文件的后面去了。

评分

参与人数 1技术分 +3 收起 理由
神之梦 + 3 很给力!

查看全部评分

回复 使用道具 举报
技术分啊
回复 使用道具 举报
瞅瞅啊,膜拜,学习,提高,练习。
回复 使用道具 举报
第一题:
  1. import java.util.Scanner;
  2. import java.util.Vector;

  3. public class Decomposition {
  4.         public static void main(String[] args) {
  5.                 System.out.println("请输入一个正整数:");
  6.                 Scanner sc = new Scanner(System.in);
  7.                 int num = sc.nextInt();
  8.                 //我们首先要得到输入的正整数以内的所有质数
  9.                 Vector<Integer> v = new Vector<Integer>();
  10.                 Lab:for(int i=2;i<=num;i++)
  11.                 {
  12.                         for(int j =2;j<=i/2;j++)
  13.                         {
  14.                                 if(i%j==0&&i!=2)//如果i能被整除,继续循环
  15.                                 {
  16.                                         continue Lab;
  17.                                 }
  18.                         }
  19.                         v.add(i);//如果能正常完成内层for循环,说明i是质数。
  20.                 }
  21.                 System.out.println("分解结果是:");
  22.                 boolean flag =true;
  23.                 for(int k=0;k<v.size();k++)
  24.                 {
  25.                         int z =(int)v.get(k);
  26.                         if(num<z)
  27.                                 break;
  28.                         if(num%z==0)//如果能被整除,说明z是num的一个质因数。
  29.                         {
  30.                                 if (flag == true){
  31.                                         System.out.print(num+"="+z);
  32.                                         flag = false;
  33.                                 }
  34.                                 else{
  35.                                         System.out.print("*"+z);
  36.                                 }
  37.                                 k--;//因为有可能num还能被z整除,所以重新执行一遍.
  38.                                 num=num/z;
  39.                         }
  40.                 }
  41.                 sc.close();
  42.         }
  43. }
复制代码
运行结果:

第二题:
  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;

  5. public class Prime {
  6.     public static void main(String[] args) {
  7.         //获取100以内的素数
  8.         List<Integer> list = new ArrayList<Integer>();
  9.         Lab:for(int i=2;i<=100;i++)
  10.                 {
  11.                         for(int j =2;j<=i/2;j++)
  12.                         {
  13.                                 if(i%j==0&&i!=2)//如果i能被整除,继续循环
  14.                                 {
  15.                                         continue Lab;
  16.                                 }
  17.                         }
  18.                         list.add(i);//如果能正常完成内层for循环,说明i是质数。
  19.                 }
  20.          
  21.         //无序化得到的素数List,存入数组,并随机生成一个相同的素数
  22.         int number = list.size();
  23.         int[] primes = new int[number + 1];
  24.         int random = (int) (Math.random() * number);
  25.         primes[random] = list.get(random);
  26.         for (int i = 0; i < number + 1; i++) {
  27.             if (i != random) {
  28.                 int index = (int) (Math.random() * list.size());
  29.                 primes[i] = list.get(index);
  30.                 list.remove(index);
  31.             }
  32.         }
  33.          
  34.         //寻找相同的素数
  35.         Map<Integer, Integer> map = new HashMap<Integer, Integer>();
  36.         for (int i = 0; i < primes.length; i++) {
  37.             if (map.put(primes[i], i) != null) {
  38.                 System.out.println("相同的素数是" + primes[i]);
  39.                 break;
  40.             }
  41.         }
  42.     }
  43. }
复制代码
运行结果:

第三题:
  1. import java.io.File;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;


  7. public class FileCopy {
  8.         public static void main(String[] args)  throws IOException
  9.         {
  10.                 try
  11.                 {
  12.                         String filePath = "d:/java/demo/";
  13.                         File inFile = new File(filePath);
  14.                         File[] files = inFile.listFiles();//列出当前路径下所有文件
  15.                         for(int i = 0; i < files.length; i++)
  16.                         {
  17.                                 File file = files[i];
  18.                                 if(file != null && file.isFile())//如果是文件且不为空
  19.                                 {
  20.                                         String fileName = file.getName();//获得文件名
  21.                                         //修改文件名
  22.                                         if("java".equalsIgnoreCase(fileName.substring(fileName.indexOf(".")+1)))
  23.                                         {
  24.                                                 char ch[] = fileName.toCharArray();
  25.                                                 int end = 0;
  26.                                                 for(int j = 0; j < ch.length; j++)
  27.                                                         if(ch[j] < '0' || ch[j] > '9')
  28.                                                         {
  29.                                                                 end = j;
  30.                                                                 j = ch.length;
  31.                                                         }
  32.                                                 String newFileName = fileName.replace(".", fileName.substring(0,end)+".");//重新命名文件
  33.                                                
  34.                                                 //复制文件
  35.                                                 BufferedReader br = new BufferedReader(new FileReader(file));
  36.                                                 File outFile = new File(filePath + newFileName);
  37.                                                 BufferedWriter bw = new BufferedWriter(new FileWriter(outFile));
  38.                                                 char buf[] = new char[1024];
  39.                                                 int len = 0;
  40.                                                 while((len = br.read(buf)) != -1)
  41.                                                         bw.write(buf, 0, len);
  42.                                                 bw.close();
  43.                                                 br.close();
  44.                                         }
  45.                                 }
  46.                         }
  47.                 } catch (Exception e)
  48.                 {
  49.                 e.printStackTrace();
  50.                 }
  51.         }
  52. }
复制代码
运行结果:


急求技术分,希望版主酌情给分,谢谢。


点评

第一题,当输入1时要考虑,第三题文件夹内包含文件夹里的文件也要考虑  发表于 2013-7-9 23:36

评分

参与人数 1技术分 +6 收起 理由
神之梦 + 6 很给力!

查看全部评分

回复 使用道具 举报
来晚了哦
回复 使用道具 举报
  1. import java.util.Scanner;
  2. public class FenJie{
  3.    public static void main(String[] args){
  4.          System.out.println("请输入一个正整数:");
  5.      Scanner sc = new Scanner(System.in);
  6.      int n = sc.nextInt();
  7.      int a=2;
  8.      if(n<1){//当n小于1的时候,数字不能分解。
  9.        System.out.println("被分解数无效,请重新输入");
  10.        return;
  11.      }
  12.      if(n==a){//当分解数为a时,分解的因数为1与他本身相乘。
  13.        System.out.println(n+"="+"1*"+n);
  14.      }
  15.      if(n>a){//当n>a时,打印分解数n=;
  16.        System.out.print(n+"=1");
  17.        while(n>=a){
  18.           if(n%a==0){
  19.        n=n/a;//当n%a余数为0,且n/a为它本身的时候打印出*和a的值
  20.              System.out.print("*"+a);


  21.            
  22.           }
  23.           else{
  24.              a=a+1;//a+1的值赋值给a.
  25.           }
  26.        }
  27.      }


  28.       System.out.println("");
  29.    }


  30. }
复制代码

点评

我的意思是如果输入6,就等于6=2*3;而不是6=1*2*3,因为1不是质数,哥们再改下吧  发表于 2013-7-9 23:39
回复 使用道具 举报
看一看,瞧一瞧
回复 使用道具 举报
本帖最后由 一木榜公 于 2013-7-9 20:46 编辑

2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。
(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
      这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。
   (随机添加的素数,可手动指定,也可利用随机方法产生)
      (注:存入数组后,数组中的所有元素理论上是无序的,相同的那个素数不一定就等于a[n],而是被存入了数组中的某个角标上)


/*
思路:
1,找出1——100的素数,存入一个数组中
(1),计数器思想,计算素数的个数,接着可以定义数组
(2),将素数随机存入数组
2,在这些素数中随机取一个,放入数组,位置不确定
(1)遍历数组找到,数组元素为0的位置
(2)将随机产生的素数放入该位置
3,搜索出两个相同素数,和在数组中的位置
用折半查找相同的素数。

*/
import java.util.Random;  //int nextInt();

class TestDemo2
{
        /*
        ** 判断一个整数是否是素数
        */
        public static boolean isSuShu(int num)
        {
                //小于1的整数不是素数
                if( num <=1 )
                        return false;

                 //能被小于num/2的数整除不是素数
                for(int x = 2; x <= num/2; x++ )
                {
                        if( num % x == 0 )
                                return false;
                }

                return true;
        }

        /*
        ** 求 1到某个整数之间的素数的总数
        */
        public static int countSuShu(int num)
        {
                int count = 0;
                for(int x =2; x <num; x++)
                {
                        if(isSuShu(x))
                                count++;
                }

                return count;
        }

        /*
        **  将一个非0整数随机存入一个整型数组
        */
        public static void  saveIntToArray(int[] arr, int num)
        {
                Random rand = new Random(); //能够随机产生一个数的对象
               
                int len = arr.length;
                int p = rand.nextInt(len);  //能够产生0~arr.length-1的整数
                //将一个非0整数存入数组
                while(true)
                {
                        if(arr[p] != 0)
                                p = rand.nextInt(len);
                        else
                        {
                                arr[p] = num;
                                return;
                        }
                }               
        }
        /*
        ** 遍历数组
        */
        public static void printArray(int[] arr)
        {
                System.out.print("[ ");
                for(int x = 0; x < arr.length; x++ )
                {
                        if(x != arr.length-1)
                                System.out.print(arr[x]+" ");
                        else
                                System.out.println(arr[x]+" ]");
                }
        }

        /*
        ** 折半查找,从角标为i的位置开始查找
        */
        public static int halfSearch(int[] arr,int i,int key)
        {
                int min=i, max=arr.length-1, mid=(min+max)/2;
                while(min<=max)
                {
                        if(key == arr[mid])
                                return mid;
                        else if(key > arr[mid])
                                min = mid + 1;
                        else
                                max = mid - 1;
                         mid=(min+max)/2;
                }
                return -1;
        }

        /*
        ** 打印数组中相同的元素
        */
        public static void printSame(int[] arr)
        {
                for(int x = 0; x < arr.length; x++)
                {
                        int p = halfSearch(arr, x+1, arr[x]);
                        if(p!= -1)
                                System.out.println("数组中第"+(p+1)+"个元素和第"+(x+1)+"个元素相同为:"+arr[x]);
               
                }
        
        }




        public static void main(String[] args)
        {
               
                int n = countSuShu(100);  //计算素数的个数

                int[] arr = new int[n+1]; // 定义数组
               
                for(int x=2;x<100; x++)   //找出1——100之间的素数,随机存入一个数组中
                {
                        if(isSuShu(x))
                                saveIntToArray(arr,x);
                }
               
                Random r =new Random();   
                for(int y = 0; y < arr.length; y++) //将随机产生的素数放入数组元素为0的位置
                {
                        if(arr[y]==0)
                        {
                                int p = r.nextInt(arr.length);
                                while(p == y)
                                {
                                        p = r.nextInt(arr.length);
                                }
                                arr[y] = arr[p];
                                break;
                        }               
                }
                //打印数组
                printArray(arr);

                //打印数组中相同的元素
                printSame(arr);
               
        }
}

2.jpg (8.66 KB, 下载次数: 0)

2.jpg

评分

参与人数 1技术分 +3 收起 理由
神之梦 + 3 再晚点,就无效了,下次记得代码放入“&lt;&gt;”.

查看全部评分

回复 使用道具 举报

哥们,初学者,不容易啊,给点分吧:handshake

程序中多了个判断是否存在正整数,所以才有了“7这个正整数不存在质因数”
回复 使用道具 举报
俺来猫一猫,顺便顶楼主
回复 使用道具 举报
版主你好,第一题代码如下
  1. <p>import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Scanner;</p><p>/*
  4. * 键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5
  5. *
  6. * 思路:键盘接收数字 然后找到该数字内所有质数,再找到该质数该有的个数 然后字符串拼接输出
  7. * */
  8. public class Test5 {</p><p> public static void main(String[] args) {
  9.   Scanner in = new Scanner(System.in);
  10.   System.out.println("请输入一个正整数::");
  11.   int num = in.nextInt();
  12.   //定义一个计数集合存放质因数个数
  13.   List<Integer> counts=new ArrayList<Integer>();
  14.   //定义一个质数集合存放质数
  15.   List<Integer> zhiyinshu=new ArrayList<Integer>();
  16.   
  17.   StringBuilder builder=new StringBuilder();
  18.   builder.append(num+"=");
  19.   
  20.   getZhiYinShu(num,counts,zhiyinshu);
  21.   
  22.   int zys=0;
  23.   int count=0;
  24.   for(int i=0;i<zhiyinshu.size();i++){
  25.    //循环集合回去质数
  26.    zys=zhiyinshu.get(i);
  27.    //获取个数
  28.    count=counts.get(i);
  29.    for(int j=0;j<count-1;j++){
  30.     builder.append(zys+"*");
  31.    }
  32.    //判断结尾
  33.    if(i<zhiyinshu.size()-1){
  34.     builder.append(zys+"*");
  35.    }else{
  36.     builder.append(zys);
  37.    }
  38.   }
  39.    System.out.println("结果为::"+builder);
  40. }</p><p> // 判断一个数是否为素数
  41. private static boolean zhiShu(int num) {
  42.   boolean b = true;
  43.   for (int i = 2; i < num; i++) {
  44.    if (num % i == 0) {
  45.     b = false;</p><p>    // 不是素数 直接跳出
  46.     break;
  47.    }
  48.    // 如果是质数就更改标记
  49.    b = true;
  50.   }
  51.   return b;
  52. }</p><p> // 找出该正整数范围内的质因数
  53. private static void getZhiYinShu(int num, List<Integer> counts,
  54.    List<Integer> zhiyinshu) {
  55.   for (int i = 2; i <= num; i++) {
  56.    // 判断i是不是输入的这个数的质因数
  57.    int numTemp = num;
  58.    int count = 0;
  59.    if (zhiShu(i) && (numTemp % i == 0)) {
  60.     //如果是质因数就存到质因数集合中
  61.     zhiyinshu.add(i);
  62.     //循环判断因式个数并添加到个数集合
  63.     while (numTemp % i == 0) {
  64.      count++;
  65.      numTemp = numTemp / i;
  66.     }
  67.     counts.add(count);
  68.    }
  69.   }
  70. }</p><p>}

  71. </p><p> </p>
复制代码
运行结果如图

QQ图片20130709231550.jpg (3.39 KB, 下载次数: 0)

第一题运行结果

第一题运行结果

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 要考虑输入1的情况

查看全部评分

回复 使用道具 举报
第二题代码如下
  1. <p>import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Random;
  4. import java.util.Set;</p><p>/*
  5. * 求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  6. 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  7. (注:存入数组后,数组中的所有元素理论上是无序的,相同的那个素数不一定就等于a[n],而是被存入了数组中的某个角标上)</p><p>思路:先定义一个HashSet集合 存入100以内的所有质数,然后定义一个长度是(n+1)的数组储存Set集合中的质数
  8. 再随机生成一个数组中的素数存到数组最后位置,循环迭代数组并把数据存入一个新的Set集合中并找到与随机产生的
  9. 数重复的数字 </p><p> * */
  10. public class Test6 {</p><p> public static void main(String[] args) {
  11.   int num = 100;
  12.   Set<Integer> set = getZhiYinShu(num);// 0-24
  13.   Set<Integer> set1 = new HashSet<Integer>();
  14.   System.out.print("1~100所有的质数为::");
  15.   System.out.println(set);</p><p>  // 将集合中的元素添加到集合中
  16.   int[] arr = setToArray(set);// 0-25
  17.   // 定义随机数r
  18.   Random r = new Random();
  19.   // 将随机生成的角标下的数存入数组中(n+1)处
  20.   arr[arr.length - 1] = arr[r.nextInt(arr.length)];
  21.   System.out.println("随机插入的质数为::" + arr[arr.length - 1]);
  22.   System.out.println();
  23.   for (int x = 0; x < arr.length - 1; x++) {
  24.    set1.add(arr[x]);
  25.    if (arr[x] == arr[arr.length - 1]) {
  26.     System.out.println("添加失败,数字重复:" + arr[x]);
  27.     continue;
  28.    } else {
  29.     System.out.println(arr[x] + "添加成功!");
  30.    }
  31.   }
  32. }</p><p> // 转换集合中的元素 到数组中
  33. private static int[] setToArray(Set<Integer> set) {
  34.   int[] arr = new int[set.size() + 1];// 26
  35.   Iterator<Integer> it = set.iterator();
  36.   int i = 0;
  37.   while (it.hasNext()) {
  38.    arr[i] = it.next();
  39.    i++;
  40.   }
  41.   return arr;
  42. }</p><p> // 判断一个数是否为素数
  43. private static boolean zhiShu(int num) {
  44.   boolean b = true;
  45.   for (int i = 2; i < num; i++) {
  46.    if (num % i == 0) {
  47.     b = false;</p><p>    // 不是素数 直接跳出
  48.     break;
  49.    }
  50.    // 如果是质数就更改标记
  51.    b = true;
  52.   }
  53.   return b;
  54. }</p><p> // 找出该正整数范围内的质因数
  55. private static Set<Integer> getZhiYinShu(int num) {</p><p>  Set<Integer> set = new HashSet<Integer>();
  56.   for (int i = 2; i <= num; i++) {
  57.    if (zhiShu(i)) {
  58.     // 如果是质因数就存到质因数集合中
  59.     set.add(i);
  60.    }
  61.   }
  62.   return set;
  63. }</p><p>}

  64. </p><p> </p>
复制代码
第二题运行结果

QQ截图20130709231847.png (19.92 KB, 下载次数: 0)

第二题运行结果

第二题运行结果

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2 下次代码插入的时候,注意不要产生&lt;/p&gt;&lt;p&gt;.

查看全部评分

回复 使用道具 举报
看看题难不难
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马