黑马程序员技术交流社区

标题: ===答题送技术分(最高9分) 第三周(已结束)=== [打印本页]

作者: 神之梦    时间: 2013-7-7 15:02
标题: ===答题送技术分(最高9分) 第三周(已结束)===
本帖最后由 神之梦 于 2013-7-13 12:17 编辑


说明:
1、回复看题,第一次回复后24小时内答题有效。(如果接下来24小时内没有足够时间答题,可先不回复。)
2、共有三个题。能做出多少就做多少,如果全部答对,可获得5~9技术分。
3、此帖结束时间:下周答题帖发布之日(7月13日或者14日)。


题目:
1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。

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

3、在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
     要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。

    (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)

加分说明:
  1、第一题1~2分,第二题2~4分,第3题2~3分。
  2、题目须自己做出,直接回复。将完整代码放在代码块中,不接收附件。
  3、必须有适当注释和思路。没有注释无分。
  4、对题目或加分有不明或异议的,可联系楼主。


第二题特别说明:
对于第二题的通俗理解:
有100个篮球,分别标号为1到100,现在你找出了其中的标号是素数的篮球(假设有n个),并把它们分别装入了n个篮子(相当于数组)里。这时有一个淘气的小朋友,从别的地方拿了1个篮球,这个篮球的标号刚好也是一个素数。然后他也拿了一个篮子装着,并随意的放在了你的某两个篮子之间(这时数组的长度就是n+1)。现在你要做的事情就是找出小孩子拿来的那个篮球。
用程序写就是3个关键点:1、找出素数,并存入数组;2、产生你找出素数中随机的一个,也存入数组,位置不确定;3、找出数组中相同的那个素数。(程序效率最优者,分高)





作者: 张歆明    时间: 2013-7-7 15:13
好的 看看 谢谢楼主
作者: mulua    时间: 2013-7-7 15:30
好东西                                 
作者: mulua    时间: 2013-7-7 16:09
  1. package huodong;
  2. /**第一题
  3. *思路
  4. *要质数分解   需要先找出从2到n之间的质数
  5. *然后找出能后整除n的输出
  6. *如果是1的话就不输出*
  7. *
  8. */
  9. import java.util.Scanner;

  10. public class ZhiShu {
  11.         //判断是否是质数
  12.         static boolean is_odd(int n)
  13.           {
  14.            if(n==2||n==3)
  15.                    return true;
  16.            if(n%2==0)
  17.                    return false;
  18.            int i;
  19.            for(i=3;i<=n/2;i+=2)
  20.                if(n%i==0)
  21.                       return false;
  22.            return true;
  23.           }
  24.          
  25.           public static void main(String[] args)
  26.           {
  27.       //读取一个数
  28.            Scanner in=new Scanner(System.in);
  29.            System.out.println("输入数值");
  30.            int n=in.nextInt();
  31.            int i;
  32.            System.out.print(n+"=");
  33.            //找出从2到n之间的质数去除n
  34.            for(i=2;i<=n;i++)
  35.            {
  36.             if(!is_odd(i))
  37.                     continue;
  38.             //可以整除就输出
  39.             if(n%i==0)
  40.             {
  41.              while(true)
  42.              {
  43.               System.out.print(i);
  44.               n/=i;
  45.               if(n!=1) System.out.print("*");
  46.               if(n%i!=0)
  47.                       break;
  48.              }
  49.             }
  50.            }
  51.            System.out.println();
  52.           }
  53. }
复制代码


作者: ㄗs:/|丶hearts    时间: 2013-7-7 16:23
0.0                           
作者: 杨晓燕    时间: 2013-7-7 16:35
顶个~凑热闹
作者: ㄗs:/|丶hearts    时间: 2013-7-7 16:38
  1. package com.java.test;

  2. import java.util.*;

  3. public class PrimeNum {

  4.         /**
  5.          * 将一个正整数分解质因数,例如:输入参数30,打印出30=2*3*5;
  6.          * @param args
  7.          */
  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub

  10.                 System.out.println("请输入一个正整数:");
  11.                 //从控制台读取输入的数字
  12.                 Scanner s = new Scanner(System.in);
  13.                 int i = s.nextInt();
  14.                 primeNum(i);
  15.         }
  16.         //将一个正整数分解质因数  并打印
  17.         public static void primeNum(int n)
  18.         {
  19.                 int j = 2;
  20.                 System.out.print(n + "=" );
  21.                 while(j<= n)
  22.                 {
  23.                         //如果该因数等于n,则说明分解质因数的过程已经结束,  打印该因数 并退出while循环
  24.                         if(j == n)
  25.                         {
  26.                                 System.out.println(j);
  27.                                 break;
  28.                         }                                                        
  29.                         //如果n%j==0那么j则是n的因子  又因为j<n 所以j是n的质因数
  30.                         if(n % j == 0 )
  31.                         {
  32.                                 //n能被j整除,则应打印出j的值,并用n除以j的商,作为新的正整数n,重复执行   
  33.                                 System.out.print(j + "*");
  34.                                 n = n / j;
  35.                         }else
  36.                         {
  37.                                 //n%j != 0  则j++ 继续循环找n的因数
  38.                                 j++;
  39.                         }
  40.                 }
  41.                
  42.         }
  43.         
  44. }
复制代码

QQ图片20130707163847.jpg (4.23 KB, 下载次数: 0)

QQ图片20130707163847.jpg

作者: mulua    时间: 2013-7-7 16:51
  1. package huodong;
  2. /**第二题
  3. * 思路
  4. *   先找出1-100中所有的素数
  5. *   将这些素数存到数组中
  6. *   在添加一个素数
  7. *          遍历数组取出相同的元素  

  8. */

  9. public class HuoDong2 {
  10.        
  11.         public static void main(String[] args) {
  12.                 //定义变量统计素数的个数
  13.                 int count = 0;
  14.                 //打印出1-100中所有的素数
  15.                 System.out.println("1-100中的素数有:");
  16.                 for (int i = 0; i < 100; i++)
  17.                 {
  18.                         if(is_odd(i))
  19.                         {
  20.                                 System.out.print(i+"  ");
  21.                                
  22.                                 count++;
  23.                         }
  24.                                
  25.                 }
  26.                 System.out.println();
  27.                 System.out.println("一共有:"+count+"个");
  28.                
  29.                 int n = count;
  30.                 int x = 0;
  31.                 int[] array = new int[n+1];
  32.                 //将求出的素数存入a[n+1]的数组中
  33.                 for (int i = 0; i < 100; i++)
  34.                 {
  35.                         if(is_odd(i))
  36.                         {
  37.                                 array[x] = i;
  38.                                 x++;
  39.                         }
  40.                 }
  41.                 //将自定义的素数5存入a[n+1]的数组中
  42.                 array[n] = 5;
  43.                
  44.                 //查找出相同的素数
  45.                 fetch(array);
  46.                
  47.                
  48.         }
  49.         //查找出相同的素数
  50.         public static void fetch(int[] array)
  51.         {
  52.                 int same = 0;
  53.                 for( int arr : array)
  54.                 {
  55.                         System.out.print(arr+"  ");
  56.                 }
  57.                 System.out.println();
  58.                 //遍历数组取出相同的元素
  59.                 for (int i = 0; i < array.length; i++)
  60.                 {
  61.                        
  62.                         for (int j = i+1; j < array.length; j++)
  63.                         {
  64.                                 if (array[i]==array[j])
  65.                                 {
  66.                                         //将相同的素数存到same中
  67.                                         same = array[i];
  68.                                 }
  69.                         }
  70.                        
  71.                 }
  72.                 System.out.println();
  73.                 System.out.println("相同的素数为:"+same);
  74.                
  75.         }
  76.        
  77.        
  78.        
  79.        
  80.         //判断是否是素数
  81.         static boolean is_odd(int n)
  82.           {
  83.            if(n==2||n==3)
  84.                    return true;
  85.            if(n%2==0)
  86.                    return false;
  87.            int i;
  88.            for(i=3;i<=n/2;i+=2)
  89.                if(n%i==0)
  90.                       return false;
  91.            return true;
  92.           }

  93. }
复制代码


作者: 姚飞    时间: 2013-7-7 16:52
啦啦啦啦啦啦啦,德玛西亚、。
作者: lanbuohan    时间: 2013-7-7 16:53
看题了~~~~~~~~~~~
作者: 王洪波    时间: 2013-7-7 17:33
看看帧

作者: ㄗs:/|丶hearts    时间: 2013-7-7 17:34
  1. package com.java.test;

  2. import java.util.Arrays;

  3. public class PrimeArray {

  4.         /**
  5.          * @param args
  6.          * 2.求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。
  7.          * (其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  8.          * 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。
  9.          * (随机添加的素数,可手动指定,也可利用随机方法产生)
  10.          *  
  11.          */
  12.         public static void main(String[] args) {
  13.                 // TODO Auto-generated method stub
  14.                
  15.                 int n = 0;
  16.                 //先将得到的素数放入一个大小为100 的数组中
  17.                 int[] a1 = new int[100];
  18.                 for (int i = 2; i <= 100; i++) {
  19.                         if (isPrime(i)) {
  20.                                 a1[n] = i;
  21.                                 n++;
  22.                         }
  23.                 }
  24.                 //将数组a1中的素数放入大小为n+1 的数组a中
  25.                 int[] a = new int[n+1];
  26.                 a = Arrays.copyOf(a1, n+1);
  27.                 a[n] = 73;//手动添加一个素数
  28.                 for (int i : a) {
  29.                         System.out.print(i+" ");
  30.                 }
  31.                 System.out.println();
  32.                 System.out.println("数组中相同的素数的角标为:"+halfSeach(a, 73));
  33.         }
  34.         //二分查找法。必须有前提:数组中的元素要有序。
  35.         public static int halfSeach(int[] arr,int key){
  36.                 int min,max,mid;
  37.                 min = 0;
  38.                 max = arr.length-1;
  39.                 mid = (max + min)/2;
  40.                 while(arr[mid]!=key){
  41.                         if(key > arr[mid]){
  42.                                 min = mid + 1;
  43.                         }
  44.                         else if(key < arr[mid])
  45.                                 max = mid - 1;
  46.                         
  47.                         mid = (max + min)/2;        
  48.                 }
  49.                 return mid;
  50.         }
  51.         //判断一个数是不是 素数
  52.         public static  Boolean isPrime(int i ) {
  53.                 for(int j = 2; j <= i/2; j++){
  54.                         if(i % j == 0){
  55.                                 return false;
  56.                         }
  57.                 }
  58.                 return true;
  59.         }
  60. }
复制代码

QQ图片20130707173405.jpg (8.82 KB, 下载次数: 0)

QQ图片20130707173405.jpg

作者: lanbuohan    时间: 2013-7-7 19:09
  1. package cn.itcast.exam;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;

  6. public class Test1 {

  7. /**1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  8. * @param args
  9. * @throws IOException
  10. */
  11. public static void main(String[] args) throws IOException {

  12. //读取数据
  13. BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

  14. String len = null;

  15. //读取数据
  16. while((len=bufr.readLine())!=null)
  17. {
  18. //转化为整数型
  19. int num = Integer.parseInt(len);
  20. System.out.print(num+"=");

  21. //这个变量时保证在循环输出时,保证第一没有“*”
  22. int b = 0;

  23. //进行因数计算 因数都是在这个期间的数字
  24. for(int i=2;i<=num;i++)
  25. {
  26. while(num%i==0)
  27. {
  28. num/=i;

  29. //除第一次不带“*”,其他数字都带“*”
  30. if(0 == b)
  31. {
  32. System.out.print(+i);
  33. }
  34. else
  35. System.out.print("*"+i);
  36. b++;
  37. }
  38. }
  39. }


  40. }

  41. }
复制代码

作者: 蚂蚁搬家    时间: 2013-7-7 19:14
看一下,上次就错过了
作者: 杨晓燕    时间: 2013-7-7 19:49
  1. /*1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5
  2. 思路:分解质因数的方法是让该数x模与i,i从i=2开始,结果为0就输出i,
  3. 得到第一个质因数,x=x/i;如果结果不为0,那么i自增,再进行模与运算。
  4. 最后x不能为分解,输出x*/
  5. import java.util.Scanner;
  6. class  Test3_1
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 Scanner in=new Scanner(System.in);//接收键盘录入的数
  11.                 int x=in.nextInt();
  12.                 for(int i=2;i<=x/2;)
  13.                 {
  14.                         if(x%i==0)//当x%i为0,说明i是x的质因数
  15.                         {
  16.                                 System.out.print(i+"*");
  17.                                 x=x/i;
  18.                         }
  19.                         else
  20.                                 i++;
  21.                 }
  22.                 System.out.println(x);
  23.         }
  24. }
复制代码
嗨~第三题,还没学到,学了也忘了,第二题还得想想
作者: 孙四有    时间: 2013-7-7 20:28
我要做做
作者: 刘张朋    时间: 2013-7-7 20:30
学习一下
作者: 杨晓燕    时间: 2013-7-7 20:36
杨晓燕 发表于 2013-7-7 19:49
嗨~第三题,还没学到,学了也忘了,第二题还得想想

木有过目不忘的本领啊,虽然看了一遍,做起题来很陌生。。苗,你就说说第一题我哪里丢了一分把
作者: 张歆明    时间: 2013-7-7 20:39
版主  您好:第一题代码
  1. package test2;

  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.util.ArrayList;
  5. import java.util.List;

  6. /*
  7. * 需求:1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  8. * */
  9. /*
  10. * 思路:
  11. * (1). 键盘读取一个正整数,之后产生[2,该正整数]之间所有的质数 存放到一个质数列表中
  12. * (2). 循环判断这些质数有哪些可以整除刚才录入的正整数
  13. * */
  14. public class Test1 {
  15.         public static void main(String[] args) throws Exception{
  16.                 //1.键盘录入数字
  17.                 BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));
  18.                 System.out.println("请您输入一个正整数:");
  19.                 String numLine =bufr.readLine();
  20.                 //检验用户输入的数字是不是数字
  21.                 int number =0;
  22.                 try{
  23.                         number =Integer.parseInt(numLine);
  24.                 }catch(NumberFormatException nfe){
  25.                         System.out.println("对不起,您输入的内容含有非数字字符");
  26.                         return;
  27.                 }
  28.                
  29.                 if(number <=0){
  30.                         System.out.println("您输入的数字不是正整数,请您重新输入...");
  31.                         return;
  32.                 }
  33.                
  34.                 //现在的数字一定是正整数
  35.                 //2.产生[2, 该正整数]范围的质数列表
  36.                         //获取该正整数的不重复的质因数列表  e.g.12质因数有[2, 3]
  37.                 List<Integer> primes =generatePrimeFacotrs(number);
  38.                
  39.                 //3.在产生的质因数的列表中,计算出键盘输入的正整数含有每个质因数的个数
  40.                 List<Integer> primesDetails =getPrimeDetails(primes, number);
  41.                
  42.                 //4.打印输出该正整数的列表
  43.                 printPrimeFactorsStr(primes, primesDetails, number);
  44.         }
  45.        
  46.         //打印输出改该正整数的列表
  47.         private static void printPrimeFactorsStr(List<Integer> primes, List<Integer> primesDetails, int number) {
  48.                 StringBuilder sBuilder =new StringBuilder();
  49.                 sBuilder.append(number+"=");
  50.                
  51.                 int primeFactor =0;
  52.                 int pCount =0;
  53.                
  54.                 for(int i =0; i<primes.size(); i++){
  55.                         primeFactor =primes.get(i);
  56.                         pCount =primesDetails.get(i);
  57.                        
  58.                         for(int j =0; j<pCount -1; j++)
  59.                                 sBuilder.append(primeFactor+"*");
  60.                        
  61.                         if(i <primesDetails.size()-1)
  62.                                 sBuilder.append(primeFactor+"*");
  63.                         else
  64.                                 sBuilder.append(primeFactor);
  65.                 }
  66.                 System.out.println("质因数分解结果:"+ sBuilder.toString());
  67.         }

  68.         //获取每个质因数在键盘输入的数中所含的具体个数
  69.         private static List<Integer> getPrimeDetails(List<Integer> primeFactors, int number) {
  70.                 List<Integer> pDetails =new ArrayList<Integer>();
  71.                
  72.                 for(int primeIndex =0; primeIndex <primeFactors.size(); primeIndex++){
  73.                         int pCount =0;
  74.                         int primeFactor =primeFactors.get(primeIndex);
  75.                        
  76.                         //一直用同一个质因数去整数该整数 一旦除到余数不为0的时候 表示这个整数里面不再含有这个质因数的成分  
  77.                         while(number%primeFactor ==0){
  78.                                 //整除一次,就把对应的质因数的次数变量pCount自加
  79.                                 pCount++;
  80.                                
  81.                                 //更新该整数
  82.                                 number =number/primeFactor;
  83.                         }
  84.                         pDetails.add(pCount);
  85. //                        System.out.println(primeFactors.get(primeIndex) +"...."+ pCount);
  86.                 }
  87.                
  88.                 return pDetails;
  89.         }

  90.         //产生[2, 该正整数]范围内的质数列表
  91.         private static List<Integer> generatePrimeFacotrs(int number) {
  92.                 List<Integer> primes =new ArrayList<Integer>();
  93.                 for(int i=2; i<=number; i++){
  94.                         //如果是质数并且能被传入的整数number整除  那么  这个数i一定是number的一个质因数
  95.                         if(isPrime(i)&&(number%i ==0))
  96.                                 primes.add(i);
  97.                 }
  98. //                System.out.println(primes);
  99.                 return primes;
  100.         }
  101.         //判断一个数是否为素数
  102.         private static boolean isPrime(int num){
  103.                 boolean isPrime =true;
  104.                 //--根据素数的定义 :在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
  105.                 //--要对给定的数 i 判定除了1和自身(num)以外的整数 是不是有能被i整除的
  106.                 for(int i=2; i<num; i++){
  107.                         if(num%i==0){ //如果能被整除 整除标记isPrime标记为false  表示不是素数
  108.                                 isPrime =false;
  109.                                 //开区间(1, i)之间一旦有一个数能整除i
  110.                                 //--就表示i不是素数  直接跳出  不用继续进行判断 节省计算量
  111.                                 break;
  112.                         }
  113.                         //如果(1, i)之间都没有能整出i的数出现, 就表示这个数i是素数  要更新isPrime
  114.                         isPrime =true;
  115.                 }
  116.                 return isPrime;
  117.         }
  118. }
复制代码
运行结果如图:

test1.jpg (10.44 KB, 下载次数: 0)

第一题结果

第一题结果

作者: 张歆明    时间: 2013-7-7 20:40
第二题代码:
  1. package test2;

  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import java.util.Random;

  6. /*
  7. 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。
  8. (其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  9.       这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。
  10.      (随机添加的素数,可手动指定,也可利用随机方法产生)
  11. */

  12. /*
  13. * 思路:
  14. * (1). 循环判断1-100之间哪些数是素数
  15. * (2). 按从大到小的顺序将这些素数存入指定的数组中  并随机添加原有素数中的某一个放在数组的最后一个位置上
  16. * (3).        上面的数组除最后一个要查找的元素以外,前面所有的元素顺从大到小排过顺序的。采用折半查找即可
  17. * */
  18. public class Test2 {
  19.         public static void main(String[] args) {
  20.                 int upBound =100;
  21.                 //1.获取1-100的所有的质数
  22.                 List<Integer> primes =getPrimes(upBound);
  23.                 System.out.println("1-100以内的素数是:"+ primes);
  24.                 //2.将列表转换成数组并随机多产生一个已产生的素数存放到转化到的数组的最后一位
  25.                 int[] primesArr =toArray(primes);
  26.                 System.out.println("产生的数组是(假如随机的素数之后):"+ Arrays.toString(primesArr));
  27.                 //3.折半搜索
  28.                 int repeatedKey =binarySearch(primesArr, primesArr[primesArr.length-1]);
  29.                 int repeatedPrime =primesArr[repeatedKey];
  30.                 System.out.println("重复的数字是:"+ repeatedPrime);
  31.         }
  32.        
  33.         //折半搜索  ----以中间值和查找的内容作比较 来作为是否继续循环的条件
  34.         private static int binarySearch(int[] arr, int key){
  35.                 int min =0, max =arr.length -1, mid =(min+ max)/2;
  36.                
  37.                 while(key!= arr[mid]){
  38.                         if(key <arr[mid]){
  39.                                 max =mid -1;
  40.                         }else if(key >arr[mid]){
  41.                                 min =mid +1;
  42.                         }
  43.                        
  44.                         if(min >max)
  45.                                 return -1;
  46.                         mid =(min+ max)/2;
  47.                 }
  48.                 return mid;
  49.         }
  50.        
  51.         //将列表转换成数组并随机多产生一个已产生的素数存放到转化到的数组的最后一位
  52.         private static int[] toArray(List<Integer> primes) {
  53.                 int[] primeArr =new int[primes.size() +1]; //题目要求多一个元素
  54.                
  55.                 for(int x=0; x <primes.size(); x++){
  56.                         primeArr[x] =primes.get(x);
  57.                 }
  58.                
  59.                 //随机产生一个素数
  60.                 int randomPrime =primeArr[new Random().nextInt(primes.size())];
  61. //                System.out.println("random prime is: "+ randomPrime);
  62.                 primeArr[primeArr.length -1] =randomPrime;
  63.                 return primeArr;
  64.         }

  65.         private static List<Integer> getPrimes(int upBound) {
  66.                 List<Integer> primes =new ArrayList<Integer>();
  67.                
  68.                 for(int i=2; i<=100; i++){
  69.                         if(isPrime(i))
  70.                                 primes.add(i);
  71.                 }
  72.                 return primes;
  73.         }

  74.         //判断一个数是否为素数
  75.         private static boolean isPrime(int num){
  76.                 boolean isPrime =true;
  77.                 //--根据素数的定义 :在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
  78.                 //--要对给定的数 i 判定除了1和自身(num)以外的整数 是不是有能被i整除的
  79.                 for(int i=2; i<num; i++){
  80.                         if(num%i==0){ //如果能被整除 整除标记isPrime标记为false  表示不是素数
  81.                                 isPrime =false;
  82.                                 //开区间(1, i)之间一旦有一个数能整除i
  83.                                 //--就表示i不是素数  直接跳出  不用继续进行判断 节省计算量
  84.                                 break;
  85.                         }
  86.                         //如果(1, i)之间都没有能整出i的数出现, 就表示这个数i是素数  要更新isPrime
  87.                         isPrime =true;
  88.                 }
  89.                 return isPrime;
  90.         }
  91. }
复制代码
运行结果如图。

test2.jpg (61.11 KB, 下载次数: 0)

第二题运行结果

第二题运行结果

作者: 夏一站    时间: 2013-7-7 20:42
看题目做题

作者: 张歆明    时间: 2013-7-7 20:43
版主  第三题代码:
  1. package test2;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9. import java.util.ArrayList;
  10. import java.util.List;

  11. /*
  12. 3、在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
  13. 要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
  14. (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
  15. */

  16. /*
  17. * 思路:
  18. * (1). 通过递归获取指定目录下的java源文件列表  并且使用正则表达式进行过滤  降符合要求的文件添加到文件列表里面
  19. * (2). 对获取到的合格的文件列表复制到指定文件加下面
  20. * */
  21. public class Test3{
  22.         public static void main(String[] args) {
  23.                 File sourceFileDir =new File("D:\\testfolder"); //源文件文件夹对象
  24.                 File destinationFileDir =new File("D:\\testFileCopies"); //目标文件夹对象
  25.                 //1.构建过滤文件名的正则表达式
  26.                         //标准文件名要求:数字+名称.java  e.g. 01Demo.java
  27.                 String fileNameRegex ="((0\\d+)Demo)(\\.java)";
  28.                 List<File> filteredJavaFileList =new ArrayList<File>();
  29.                
  30.                 //2.按照标准生成符合条件的源文件对象列表和目标文件对象列表  ---递归方式生成
  31.                 getQualifiedFilesList(sourceFileDir, filteredJavaFileList, fileNameRegex);
  32.                
  33.                 //3.把源文件列表中的文件复制到目标地址中
  34.                 copyFileList(filteredJavaFileList, destinationFileDir, fileNameRegex);
  35.         }
  36.        
  37.         //把源文件列表中的文件复制到目标地址中
  38.         private static void copyFileList(List<File> filteredJavaFileList,
  39.                         File destinationFileDir, String fileNameRegex) {
  40.                 for(File sourceJavaFile: filteredJavaFileList){
  41.                         //根据正则标准产生按照标准的文件夹名
  42.                         String newFileName = sourceJavaFile.getName().replaceAll(fileNameRegex, "$1$2$3");
  43.                         File destiJavaFile =new File(destinationFileDir, newFileName);
  44.                         System.out.println("原文件名:"+sourceJavaFile.toString()+"-----新文件名:"+ destiJavaFile);
  45.                         //复制单个文件
  46.                         copyFile(sourceJavaFile, destiJavaFile);
  47.                 }
  48.         }
  49.        
  50.         //复制单个文件
  51.         private static void copyFile(File sourceJavaFile, File destiJavaFile) {
  52.                 BufferedReader bufr =null;
  53.                 BufferedWriter bufw =null;
  54.                
  55.                 try{
  56.                         //源(InputStream/Reader)--->文本(Reader)--->设备(硬盘文件 FileReader) --->高效(BufferedReader)
  57.                         bufr =new BufferedReader(new InputStreamReader(new FileInputStream(sourceJavaFile), "GBK"));
  58.                         //目标(OutputStream/Writer)--->文本(Writer)--->设备(硬盘文件 FileWriter) --->高效(BufferedWriter)
  59.                         bufw =new BufferedWriter(new FileWriter(destiJavaFile));
  60.                        
  61.                         String lineContent =null;
  62.                         System.out.println(sourceJavaFile);
  63.                         while((lineContent =bufr.readLine()) !=null){
  64.                                 bufw.write(lineContent);
  65.                                 bufw.newLine();
  66.                                 bufw.flush();
  67.                         }
  68.                 }catch(IOException ioe){
  69.                         System.out.println(ioe.toString());
  70.                 }finally{
  71.                         try{
  72.                                 if(bufr !=null)
  73.                                         bufr.close();
  74.                         }catch(IOException ioe){
  75.                                 System.out.println(ioe.toString());
  76.                         }
  77.                        
  78.                         try{
  79.                                 if(bufw !=null)
  80.                                         bufw.close();
  81.                         }catch(IOException ioe){
  82.                                 System.out.println(ioe.toString());
  83.                         }
  84.                 }
  85.         }

  86.         private static void getQualifiedFilesList(File sourceFileDir,
  87.                         List<File> filteredJavaFileList, String fileNameRegex) {
  88.                 File[] files =sourceFileDir.listFiles();

  89.                 //递归获取符合fileNameRegex标准的java源文件列表
  90.                 for(int x =0; x <files.length; x++){
  91.                         if(files[x].isDirectory()) //遍历的是目录
  92.                                 getQualifiedFilesList(files[x], filteredJavaFileList, fileNameRegex);
  93.                         else{//遍历到的是文件
  94.                                 String oldFileCanonicalName =files[x].getName();
  95.                                 //符合要求规则的全部加进来
  96.                                 if(oldFileCanonicalName.matches(fileNameRegex)){
  97.                                         //添加符合条件的源文件对象
  98.                                         filteredJavaFileList.add(files[x]);
  99.                                 }
  100.                         }
  101.                 }
  102.                
  103.         }
  104. }
复制代码
运行结果如图:

test3.jpg (208.16 KB, 下载次数: 0)

运行测试结果

运行测试结果

源文件夹情况.jpg (82.71 KB, 下载次数: 0)

复制的源文件夹下的文件

复制的源文件夹下的文件

目标文件夹情况.jpg (44.16 KB, 下载次数: 0)

复制的目标夹下的文件

复制的目标夹下的文件

作者: 杨晓燕    时间: 2013-7-7 20:49
杨晓燕 发表于 2013-7-7 20:36
木有过目不忘的本领啊,虽然看了一遍,做起题来很陌生。。苗,你就说说第一题我哪里丢了一分把 ...

oooo,有道理,收了,哈哈
作者: 傻瓜一点红    时间: 2013-7-7 20:57
先看看,有时间就弄弄
作者: emos-c    时间: 2013-7-7 21:09
看看有没有简单点的

作者: 肥猫    时间: 2013-7-7 21:14
本帖最后由 肥猫 于 2013-7-8 21:13 编辑

新的一周又来了,我来答~~.小喵你这题目是挺有意思,可是这个时间限定也太蛋疼了吧.白天没空啊,晚上那么点时间就过24小时.
  1. /**
  2. 功能:键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  3. author:肥猫
  4. */
  5. import java.util.*;

  6. class Test111
  7. {
  8.       public static void main(String[] args)
  9.      {
  10.             Scanner input =new Scanner(System.in);
  11.             System.out.print("请输入要分解质因数的值:");
  12.             int n = input.nextInt();//定义键盘输入值
  13.             System.out.print(n+"=");
  14.             for(int i=2;i<=n;i++)//从最小的质数开始,区间到N为止.
  15.            {
  16.                  while(n%i==0&&n!=i)//只有当N模的尽时切本身不为质数,说明其还能分解,才进行分解操作.
  17.                 {
  18.                        System.out.print(i+"*");
  19.                        int temp=0;
  20.                        n=n/i;
  21.                 }
  22.                  if(n==i)//当N为质数不能在分解时就输出.
  23.                 {
  24.                        System.out.println(i);
  25.                 }
  26.            }
  27.     }
  28. }
复制代码

作者: 黄少海    时间: 2013-7-7 21:14
等到我花儿都谢了.
作者: 宋智超    时间: 2013-7-7 21:15
回帖看题
作者: 宋智超    时间: 2013-7-7 21:30
本帖最后由 宋智超 于 2013-7-7 21:32 编辑

第一题:
  1. <FONT face=宋体></FONT>
复制代码


作者: 宋智超    时间: 2013-7-7 21:39
第一题:
//键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
import java.util.Scanner;
class N1 {
public static void main(String[] args) {
  Scanner num = new Scanner(System.in);
  System.out.println("请输入所要分解质因数的数:");
  int n = num.nextInt();                              //以上为获取一个整数
  System.out.print(n+"=");       //先输出最终结果的前面部分,后面用累除做出质因数后,按顺序添加。
  for (int i = 2; i < n+1 ;i++){      //循环尝试可能的质因数
   while(n%i==0 && n!=i) {       //判断是否为质因数,如果是则顺序输出,此时给n除以得出的质因数,以便进行下一次判断。
    n/=i;   
    System.out.print(i+"*");   
   }  
   if(n==i) {          //判断是否将质因数求完
    System.out.print(i);   
    break;
   }
  }  
}
}


作者: longlangcx    时间: 2013-7-7 21:49
看看~~~~求技术分~~~~
作者: ㄗs:/|丶hearts    时间: 2013-7-7 23:20
ㄗs:/|丶hearts 发表于 2013-7-7 17:34


就把这里System.out.println("数组中相同的素数的角标为:"+halfSeach(a, 73));
改成System.out.println("数组中相同的素数的角标为:"+halfSeach(a, a[n])); 是吧?
作者: lou413    时间: 2013-7-7 23:59
先看看题目:)
作者: mo﹎雲℡    时间: 2013-7-8 00:34
我先看看题~~
作者: 王洪波    时间: 2013-7-8 00:38
  1. package com.itheima.bbs.c5a3;

  2. import java.util.Scanner;

  3. /**
  4. * 1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  5. */
  6. public class test1
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 Scanner input = new Scanner(System.in);
  11.                 System.out.println("please input a positive integer :");
  12.                 int n ;
  13.                 while((n=input.nextInt()) <= 0)//只有输入的正数才行
  14.                 {
  15.                         System.out.println("input a positive integer:");
  16.                 }
  17.                
  18.                 StringBuilder sb = new StringBuilder();//构建输出字符串
  19.                 int count=0;//记录质因子的个数
  20.                 for(int i=2;i<=n;i++)//从最小的质数开始,依次分解完所有的质因子后,再分解下一个
  21.                 {
  22.                         if (n%i==0) //是因子才分解
  23.                         {
  24.                                 count++;
  25.                                 if(count==1)
  26.                                 {
  27.                                         sb.append(n+"="+i);//首个因子出现时,等式的初始化
  28.                                 }
  29.                                 else
  30.                                 {
  31.                                         sb.append("*"+i);//其它因子累乘到后边
  32.                                 }
  33.                                
  34.                                 n=n/i;//用质因子i分解n后再赋值给n
  35.                                
  36.                                 i--;//重新尝试i整除n,可能i的多次幂为n的因子
  37.                         }
  38.                 }//end for
  39.                
  40.                 //输出结果
  41.                 System.out.println(sb.toString());
  42.                
  43.         }
  44. }
复制代码
  1. package com.itheima.bbs.c5a3;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;

  5. /**
  6. * 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  7.       这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  8. */
  9. public class test2
  10. {
  11.         public static void main(String[] args)
  12.         {       
  13.                 List<Integer> primes = new ArrayList<Integer>();
  14.                 primes.add(2);//2 为素数先加进去
  15.                 for(int i=3; i<=100; i+=2)
  16.                 {
  17.                         if(isPrime(i))
  18.                                 primes.add(i);
  19.                 }
  20.                 //随机生成一个索引
  21.                 int index = new Random().nextInt(primes.size());
  22.                 //添加素数
  23.                 primes.add(primes.get(index));
  24.                 int size = primes.size();
  25.                 //输出结果
  26.                 printArray(primes);
  27.                
  28.                 int s = primes.get(size-1);//要找的数
  29.                 System.out.println("要找的数:"+s);
  30.                 //查找与添加的随机素数相同的素数(因为添加时,从小到大依次添加,所以元素已有序,符合二叉查找的条件)
  31.                 int result = binSearch(s, primes.subList(0, size-1));
  32.                 if(result!=-1)
  33.                 {
  34.                         System.out.println("找到了"+s+",其在数组中的位置:"+result);
  35.                 }
  36.                 else
  37.                 {
  38.                         System.out.println("没有找到");
  39.                 }
  40.         }
  41.         /**
  42.          * 在集合list中查找元素i
  43.          */
  44.         private static int binSearch(Integer i, List<Integer> list)
  45.         {       
  46.                 Integer[]array = list.toArray(new Integer[list.size()]);
  47.                 int high = list.size()-1;
  48.                 int low = 0;
  49.                 int mid;
  50.                 while(low<=high)
  51.                 {
  52.                         mid = (low+high)/2;
  53.                         if(array[mid] < i)
  54.                         {
  55.                                 low = mid + 1; //在右半部查找
  56.                         }
  57.                         else if(array[mid] > i)
  58.                         {
  59.                                 high = mid - 1; //在左半部查找
  60.                         }
  61.                         else
  62.                                 return mid;
  63.                 }
  64.                
  65.                 return -1;//没有找到则返回-1
  66.                
  67.         }

  68.         private static void printArray(List<Integer> primes)
  69.         {
  70.                 for(int i=1,size=primes.size(); i<size; i++)
  71.                 {       
  72.                         //十个一行输出
  73.                                 System.out.print((i-1)+":"+primes.get(i-1)+" ");
  74.                                 if(i%10 == 0)
  75.                                         System.out.println();
  76.                 }
  77.                 System.out.println();
  78.         }

  79.         /**
  80.          * 判断i是否为素数
  81.          */
  82.         private static boolean isPrime(int i)
  83.         {       
  84.                 for(int j=2; j<i; j++)
  85.                 {
  86.                         if(i%j == 0)
  87.                                 return false;
  88.                 }
  89.                 return true;
  90.         }
  91. }
复制代码
  1. package com.itheima.bbs.c5a3;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;

  9. /**
  10. * 3、在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
  11.              要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
  12.             (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
  13. */
  14. /**
  15. * 首先声明不能以数字开头命名java源文件
  16. */
  17. public class test3
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 File dir = new File(".");//当前文件路径是工程文件夹内部
  22.                 System.out.println(dir.getAbsolutePath());
  23.                 //递归遍历该文件夹,并输出所有文件
  24.                 copyFiles(dir);
  25.                 /*String str = "Demo01.java";
  26.                 String str2 = renameFile(str);
  27.                 System.out.println(str2);*/
  28.         }
  29.         /**
  30.          * 递归目录拷贝.java类型文件
  31.          * @param dir 指定的根目录
  32.          */
  33.         private static void copyFiles(File dir)
  34.         {       
  35.                 //进入目录
  36.                 File[]fs = dir.listFiles();
  37.                 for(File f : fs)
  38.                 {
  39.                         if(f.isDirectory())//遍历目录
  40.                                 copyFiles(f);
  41.                         else if(f.getName().endsWith(".java"))//找到以java为后缀名的文件
  42.                         {       
  43.                                 copyTo(f,"./bak");//将所有.java类型的文件拷贝到当前文件夹下bak目录中
  44.                         }
  45.                 }
  46.         }
  47.         /**
  48.          * 将文件拷贝到指定目录
  49.          * @param fileName
  50.          * @param destDir
  51.          */
  52.         private static void copyTo(File file, String destDir)
  53.         {
  54.                 String newFileName = renameFile(file.getName());
  55.                 //通过字符流来复制
  56.                 BufferedReader br = null;
  57.                 BufferedWriter wr = null;
  58.                 try
  59.                 {
  60.                         br = new BufferedReader(new FileReader(file.getAbsoluteFile()));
  61.                         File destPath = new File(destDir);
  62.                        
  63.                         //不存在目的目录要创建
  64.                         if(!destPath.exists()) destPath.mkdirs();
  65.                        
  66.                         wr = new BufferedWriter(new FileWriter(destDir+"/"+newFileName));
  67.                         String line = null;
  68.                         while(null != (line=br.readLine()))
  69.                         {
  70.                                 wr.write(line);
  71.                                 wr.flush();
  72.                         }
  73.                 } catch (FileNotFoundException e)
  74.                 {
  75.                         e.printStackTrace();
  76.                 } catch (IOException e)
  77.                 {
  78.                         e.printStackTrace();
  79.                 }
  80.                 finally
  81.                 {
  82.                         try
  83.                         {       
  84.                                 if(br!=null)
  85.                                 br.close();
  86.                         } catch (IOException e)
  87.                         {
  88.                                 e.printStackTrace();
  89.                         }
  90.                         try
  91.                         {       
  92.                                 if(wr!=null)
  93.                                         wr.close();
  94.                         } catch (IOException e)
  95.                         {
  96.                                 e.printStackTrace();
  97.                         }
  98.                 }
  99.         }
  100.         /**
  101.          * 重新命名文件
  102.          * @param fileName
  103.          * @return 重新命名后的文件名
  104.          */
  105.         private static String renameFile(String fileName)
  106.         {       
  107.                 /*String regex = "^(\\D+)(\\d+)(\\..+)$";//匹配以数字结尾的字符串
  108.                 String replacement = "$2$1$2$3";*/
  109.                
  110.                 String regex = "^(\\d+)(\\D*)(\\..+)$";//匹配以数字开头的字符串
  111.                 String replacement = "$1$2$1$3";
  112.                 String newFileName = fileName.replaceFirst(regex, replacement);
  113.                
  114.                 return newFileName;
  115.         }

  116. }
复制代码

作者: lou413    时间: 2013-7-8 01:25

运行结果


作者: lanbuohan    时间: 2013-7-8 01:36
本帖最后由 lanbuohan 于 2013-7-8 01:56 编辑

  1. <P>package cn.itcast.exam;


  2. public class Test2 {

  3. /**
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. </P>
  9. <P> </P>
  10. <P>for (int i = 2; i <100; i++)
  11.   {            
  12.    for (int j = 2; j <= i; j++)      
  13.    {           
  14.     if (i == j)  
  15.     {//      
  16.      System.out.println(i);      
  17.     }   
  18.     if (i % j == 0)  
  19.     {           
  20.      break;   
  21.     }      
  22.    }     
  23.   }




  24. }</P>
  25. <P>
  26. }
  27. </P>
复制代码

作者: Godream    时间: 2013-7-8 02:27
我看帖的
作者: 蚂蚁搬家    时间: 2013-7-8 02:36
只做了第二题和第三题,明天还得上班啊!能力有限,做得很慢啊!
不妥之处,还请指正!
第二题,代码如下:
  1. /*
  2. 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机
  3. 添加其中的一个素数)
  4. 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,
  5. 也可利用随机方法产生)
  6. */

  7. /*
  8. 基本思路:1,用getPrime方法的for循环嵌套找出1到100之间的素数,并将其存入集合中;(1不是素数)
  9. 2,将集合转换为数组;
  10. 3,用find方法的for循环嵌套找出相同的素数,并输出到控制台;
  11. 4,运行结果:所有的素数是:{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,
  12. 67,71,73,79,83,89,97},共25个;最后的相同的素数是73;
  13. @author:蚂蚁搬家;
  14. */

  15. import java.util.*;

  16. public class PrimeNumber
  17. {
  18.         public static void main(String [] args)
  19.         {
  20.                         ArrayList<Integer> list = new ArrayList<Integer>();                //新建集合,用于存储素数;
  21.                         getPrime(list);                        //获取1到100之间的素数;
  22.                        
  23.                         System.out.println(list);                //输出1到100之间的素数;
  24.                                
  25.                         Integer[] prime = list.toArray(new Integer[list.size()]);
  26.                        
  27.                         find(prime);                //找出数组中的相同素数;
  28.                        
  29.         }       
  30.        
  31.         public static void getPrime(ArrayList<Integer> tempList)
  32.         {
  33.                         int count = 0;                //计数器,素数的个数;
  34.                        
  35.                         outer:                //循环语句的标号;
  36.                         for(int i=2; i<=100; i++)                //由于1本身不是素数,所以从2开始;
  37.                         {
  38.                                 /*用i除以从2开始到小于i的最大整数,如果能整除,说明i不是素数,跳出内层循环,进入外层循环;
  39.                                 如果内层循环结束还不能整除,说明i是素数,存入集合中,计数器加1;
  40.                                 */
  41.                                 for(int j=2; j < i; j++)
  42.                                 {
  43.                                                 if(i%j == 0)       
  44.                                                         continue outer;
  45.                                 }
  46.                                 tempList.add(i);
  47.                                 count = count+1;
  48.                         }
  49.                         //向集合中随机添加一个1到100之间的素数;
  50.                         tempList.add(tempList.get(count-5));
  51.         }
  52.        
  53.         public static void find(Integer[] tempPrime)
  54.         {
  55.                         //用第一个素数跟它后面的每个素数比较,若相等,输出相等的素数,若不等,则用第二素数跟后面的每个素数比较,以此类推;
  56.                         for(int i=0; i<tempPrime.length; i++)
  57.                         {
  58.                                
  59.                                 for(int j=i+1; j<tempPrime.length; j++ )
  60.                                 {
  61.                                         if(tempPrime[i] == tempPrime[j])
  62.                                         {
  63.                                                 System.out.println("相同的那个素数是:" + tempPrime[i]);       
  64.                                                 return ;               
  65.                                         }
  66.                                        
  67.                                 }       
  68.                                
  69.                         }
  70.         }
  71. }
复制代码
第三题:
  1. /*
  2. 在一个文件夹内有文件夹和文件,文件名的格式为:数字+daxiang.java。
  3. 要求:把所有的.java文件复制一份,变为文件名格式为:数字+daxiang+数字.java。
  4. (其中数字是相对应的,名称由字母组成。在本例中,文件名应该由"数字+daxiang.java"变为"数字+daxiang+数字.java")
  5. */
  6. /*
  7. 基本思路:1,用递归方法获取到源目录下的java文件;
  8. 2,用缓冲流将源文件复制到目的文件夹下的目的文件;
  9. 3,用字符串的split方法拆分并重新组合出目的文件的文件名;
  10. @author:蚂蚁搬家;
  11. */

  12. import java.io.*;

  13. public class CopyFile
  14. {
  15.                 public static void main(String [] args)
  16.                 {
  17.                                 File file = new File("F:\\答题有分");                        //源文件夹封装为File对象;
  18.                                 get(file);                                                                                                                                //调用get方法实现题目要求;
  19.                 }
  20.                
  21.                 /*用递归方法获取源目录下的每个java文件,然后调用copyFile方法,将源文件复制到另一个文件夹中,
  22.                 并对文件按照题目要求进行更名;*/
  23.                 public static void get(File srcFile)                                
  24.                 {
  25.                                 File[] files  = srcFile.listFiles();                //列出源目录下的所有文件和目录;
  26.                                
  27.                                 for(File file : files)
  28.                                 {
  29.                                         if(file.isDirectory())                                //如果是目录,递归调用get方法;
  30.                                         {
  31.                                                         get(file);
  32.                                         }       
  33.                                         else
  34.                                         {
  35.                                                 if(file.getName().endsWith(".java"))                //如果是java文件,调用copyFile方法;
  36.                                                 {
  37.                                                         copyFile(file);       
  38.                                                 }
  39.                                         }
  40.                                 }
  41.                 }
  42.                
  43.                 //将源文件复制到目的文件夹,并对源文件按照题目要求更名;
  44.                 public static void copyFile(File file)
  45.                 {
  46.                                 BufferedReader br = null;
  47.                                 BufferedWriter bw = null;
  48.                                 try
  49.                                 {
  50.                                                 br = new BufferedReader(new FileReader(file));
  51.                                                
  52.                                                 String srcName = file.getName();                //获取源文件的文件名;
  53.                                                 String[] tempName = srcName.split("daxiang");         //将源文件名用“daxiang”拆分,拆分出来的结果是“数字”和“.java”;
  54.                                                 String lastedName = tempName[0] + "daxiang" + tempName[0] + tempName[1];        //重新组合出来的结果就是"数字+daxiang+数字.java";
  55.                                                
  56.                                                 bw = new BufferedWriter(new FileWriter("F:\\目标文件夹\\" + lastedName));
  57.                                                
  58.                                                 String buf = null;
  59.                                                 while((buf = br.readLine()) != null)
  60.                                                 {
  61.                                                         bw.write(buf);
  62.                                                         bw.newLine();
  63.                                                         bw.flush();       
  64.                                                 }
  65.                                 }
  66.                                 catch(IOException e)
  67.                                 {
  68.                                         System.out.println("文件复制失败!");       
  69.                                 }
  70.                                
  71.                                 finally
  72.                                 {
  73.                                         try
  74.                                         {
  75.                                                         if(br != null)
  76.                                                                 br.close();
  77.                                         }       
  78.                                         catch(IOException e)
  79.                                         {
  80.                                                        
  81.                                         }
  82.                                        
  83.                                         try
  84.                                         {
  85.                                                 if(bw != null)
  86.                                                 bw.close();       
  87.                                         }
  88.                                         catch(IOException e)
  89.                                         {
  90.                                                        
  91.                                         }
  92.                                 }
  93.                 }
  94. }

  95.        

复制代码
不足之处,敬请指出!在此,先谢过了!{:soso_e183:}
作者: 秦兰之    时间: 2013-7-8 04:36
晒太阳。
作者: liujkh123    时间: 2013-7-8 08:43
开始挑战
作者: 杨晓燕    时间: 2013-7-8 08:48
杨晓燕 发表于 2013-7-7 20:49
oooo,有道理,收了,哈哈

:lol你苗,你太好了,怎么发现的
作者: 教皇    时间: 2013-7-8 09:56
要积分,来答题,要回复。

作者: 张歆明    时间: 2013-7-8 10:14
本帖最后由 张歆明 于 2013-7-8 14:50 编辑

版主  第二题我已经重新做了   第一题和第三题没问题吧  
第二题的代码:
  1. package test2;

  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.Random;
  7. import java.util.Set;

  8. /*
  9. 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。
  10. (其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  11.       这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。
  12.      (随机添加的素数,可手动指定,也可利用随机方法产生)
  13. */

  14. /*
  15. * 思路:
  16. * (1). 循环判断1-100之间哪些数是素数
  17. * (2). 将产生的素数存入一个数组,这时候随机产生一个素数并随机产生一个索引位置   通过插入的方式 将这个
  18. *                 素数存入相应的随机的位置
  19. * (3).        上面的数组除最后一个要查找的元素以外,前面所有的元素顺从大到小排过顺序的。采用折半查找即可
  20. * */
  21. public class Test2 {
  22.         public static void main(String[] args) {
  23.                 int upBound =100;
  24.                 //1.获取1-100的所有的质数
  25.                 List<Integer> primes =getPrimes(upBound);
  26.                 System.out.println("1-100以内的素数是:"+ primes);
  27.                
  28.                 //2.将产生的素数存入一个数组,这时候随机产生一个素数
  29.                         //并随机产生一个索引位置   通过插入的方式 将这个
  30.                         //素数存入相应的随机的位置
  31.                 int[] primesArr =toArray(primes);
  32.                 System.out.println("产生的数组是: "+ Arrays.toString(primesArr));
  33.                
  34.                 //3.由于随机生成的数字插入的位置未知,现在要找出这个数,可以利用Set集合的属性  将数组中的元素逐次添加到
  35.                         //Set集合中  一旦添加失败  说明这个元素是重复的 这样就找出了重复加入的那个素数
  36.                 int repeatedPrime =detectRepeatedPrime(primesArr);
  37.                
  38.                 System.out.println("重复的数字是:"+ repeatedPrime);
  39.         }
  40.        
  41.         //检测重复加入的数字
  42.         private static int detectRepeatedPrime(int[] primesArr) {
  43.                 Set<Integer> assistSet =new HashSet<Integer>();
  44.                 int repeatedNum =0;
  45.                 for(int element: primesArr){
  46.                         boolean flag =assistSet.add(element);
  47.                         if(flag)
  48.                                 System.out.println(element+"添加成功...");
  49.                         else{
  50.                                 System.out.println("**"+ element+"重复...");
  51.                                 //找到重复的元素就达到了目的   立刻结束添加操作
  52.                                 repeatedNum =element;
  53.                                 break;
  54.                         }
  55.                 }
  56.                 return repeatedNum;
  57.         }

  58.         //将产生的素数列表存入数组  并随机重复产生一个素数存入一个随机的位置
  59.         private static int[] toArray(List<Integer> primes) {
  60.                 int[] primeArr =new int[primes.size() +1]; //题目要求多一个元素
  61.                
  62.                 for(int x=0; x <primes.size(); x++){
  63.                         primeArr[x] =primes.get(x);
  64.                 }
  65.                
  66.                 //随机产生一个素数
  67.                 int randomPrime =primeArr[new Random().nextInt(primes.size())];
  68.                 System.out.println("随机产生的重复的素数是: "+ randomPrime);
  69.                
  70.                 //再次随机产生一个索引位置 并将这个随机产生的素数存入这个随机产生的索引位置
  71.                 int randomIndex =new Random().nextInt(primes.size());
  72.                 System.out.println("这个随机产生的素数存放到原数组的随机位置是: "+ randomIndex);
  73.                 insertIntoArray(randomPrime, randomIndex, primeArr);
  74.                 return primeArr;
  75.         }
  76.        
  77.         //将指定的数字存入指定的位置
  78.         private static void insertIntoArray(int num, int index,
  79.                         int[] primeArr) {
  80.                 //向指定数组的指定位置插入一个数字  现将数组中此位置以后的数字依次向后进行移位
  81.                 for(int i= primeArr.length-2; i>= index; i--){
  82.                         primeArr[i+1] =primeArr[i];
  83.                 }
  84.                
  85.                 //将指定的数字插入到指定的位置
  86.                 primeArr[index] =num;
  87.         }
  88.        
  89.         //获取指定范围的素数
  90.         private static List<Integer> getPrimes(int upBound) {
  91.                 List<Integer> primes =new ArrayList<Integer>();
  92.                
  93.                 for(int i=2; i<=100; i++){
  94.                         if(isPrime(i))
  95.                                 primes.add(i);
  96.                 }
  97.                 return primes;
  98.         }

  99.         //判断一个数是否为素数
  100.         private static boolean isPrime(int num){
  101.                 boolean isPrime =true;
  102.                 //--根据素数的定义 :在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
  103.                 //--要对给定的数 i 判定除了1和自身(num)以外的整数 是不是有能被i整除的
  104.                 for(int i=2; i<num; i++){
  105.                         if(num%i==0){ //如果能被整除 整除标记isPrime标记为false  表示不是素数
  106.                                 isPrime =false;
  107.                                 //开区间(1, i)之间一旦有一个数能整除i
  108.                                 //--就表示i不是素数  直接跳出  不用继续进行判断 节省计算量
  109.                                 break;
  110.                         }
  111.                         //如果(1, i)之间都没有能整出i的数出现, 就表示这个数i是素数  要更新isPrime
  112.                         isPrime =true;
  113.                 }
  114.                 return isPrime;
  115.         }
  116. }
复制代码
不好意思 版主 一时疏忽 没有贴完整  额  这回完整啦 您看看对不对 :)

test2_1.jpg (105.79 KB, 下载次数: 0)

test2_1.jpg

作者: liujkh123    时间: 2013-7-8 10:49
第一题,
  1. package test;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. public class TestFactorization {
  6.         public static void main(String[] args) {
  7.                 BufferedReader bfbr = new BufferedReader(new InputStreamReader(System.in));
  8.                 System.out.println("请输入要分解因数的数,按回车确认");//
  9.                 try {
  10.                         String line = bfbr.readLine();
  11.                         int num = Integer.parseInt(line);//获得输入的数
  12.                         showFactorization(num);
  13.                 } catch (IOException e) {
  14.                         e.printStackTrace();
  15.                 }catch(Exception e){
  16.                         e.printStackTrace();
  17.                         throw new RuntimeException("输入非法,请输入数字");
  18.                 }
  19.                
  20.         }

  21.         /**
  22.          * 这个函数就是用来计算质因数了
  23.          * @param num
  24.          */
  25.         private static void showFactorization(int num) {
  26.                 int n = num;
  27.                 StringBuilder sb = new StringBuilder();
  28.                 for(int i=2; i<=num/2; i++){
  29.                         while(n%i == 0){
  30.                                 sb.append(i + "*");
  31.                                 n = n/i;
  32.                         }
  33.                        
  34.                         if(n < i) //这个判断条件可以减少循环次数,节省资源
  35.                                 break;
  36.                 }
  37.                
  38.                 if(sb.length() != 0){
  39.                         sb.deleteCharAt(sb.length()-1);//如果不是素数,就把多余的*给去掉
  40.                 }else{
  41.                         sb.append(1 +"*" + num);//如果是素数,就这样输出
  42.                 }
  43.                
  44.                 System.out.println(sb.toString());
  45.         }
  46. }
复制代码
输出结果
请输入要分解因数的数,按回车确认
13
1*13

请输入要分解因数的数,按回车确认
100
2*2*5*5


第二题
  1. package test;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;

  5. public class TestPrime {

  6.         public static void main(String[] args) {
  7.                 Integer[] arr = getPrimeArr();
  8.                 System.out.println("数组中相同的两个元素角标为" + getSame(arr));
  9.         }
  10.        
  11.         public static Integer[] getPrimeArr(){
  12.                 List<Integer> arrList = new ArrayList<Integer>();
  13.                 for(int i=1; i<=100; i++){
  14.                         if(isPrime(i))
  15.                                 arrList.add(i);
  16.                 }
  17.                
  18.                 //这段代码简化了,就是arrList.add(int, Integer)只不过两个参数都通过随机工具来确定
  19.                 arrList.add(new Random().nextInt(arrList.size()),arrList.get(new Random().nextInt(arrList.size())));
  20.                
  21.                 System.out.println(arrList);
  22.                 return arrList.toArray(new Integer[arrList.size()]);
  23.         }
  24.        
  25.         //该方法判断一个数是否为素数
  26.         public static boolean isPrime(int i){
  27.                 if(i == 1||i==2||i==3)
  28.                         return true;
  29.                 else{
  30.                         for(int j=2; j<=i/2; j++){
  31.                                 if(i%j == 0 ){
  32.                                         return false;                               
  33.                                 }
  34.                         }
  35.                 }               
  36.                 return true;
  37.         }
  38.        
  39.         //这个方法可以再优化,然后寻找到拥有三个以上的相同元素的数组中相同元素的角标,这里是根据题目写的简洁版
  40.         public static String getSame(Integer[] arr){
  41.                 List<Integer> arrList = new ArrayList<Integer>();
  42.                
  43.                 String str = null;
  44.                 for(int i=0; i<arr.length; i++){
  45.                         if(!arrList.contains(arr[i])){
  46.                                 arrList.add(arr[i]);
  47.                         }else
  48.                                 str =  arrList.indexOf(arr[i]) + "," + i;
  49.                 }
  50.                
  51.                 return str;
  52.         }

  53. }
复制代码
输出结果
[1, 2, 3, 17, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
数组中相同的两个元素角标为3,8

第三题
  1. package test;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.util.regex.Matcher;
  10. import java.util.regex.Pattern;

  11. public class CopyFileDemo {

  12.         public static void main(String[] args) {
  13.                 File file = new File("E:\\cn");
  14.                 overFile(file);
  15.         }
  16.        
  17.         /**
  18.          * 遍历文件夹 进行复制,题目指明了文件名称的格式,如果更严谨点还应该在方法中加入判断是否为java文件的语句
  19.          * @param file
  20.          */
  21.         public static void overFile(File file){
  22.                 if(!file.exists())
  23.                         return ;
  24.                 if(file.isDirectory()){
  25.                         File[] files = file.listFiles();
  26.                         for(File f: files){
  27.                                 if(f.isDirectory())
  28.                                         overFile(f);
  29.                                 else{
  30.                                         copyFile(f.getAbsoluteFile());
  31.                                 }
  32.                         }
  33.                 }else{
  34.                         copyFile(file.getAbsoluteFile());
  35.                 }
  36.         }
  37.        
  38.         public static void copyFile(File file){
  39.                 BufferedInputStream bis = null;
  40.                 BufferedOutputStream bos = null;
  41.                 try {
  42.                         bis = new BufferedInputStream(new FileInputStream(file));
  43.                         bos = new BufferedOutputStream(new FileOutputStream(changeName(file)));//调用变更名字的方法来创建复制的文件
  44.                        
  45.                         byte[] buf = new byte[1024];
  46.                         int len = 0;
  47.                         while((len = bis.read(buf)) != -1){
  48.                                 bos.write(buf, 0, len);
  49.                         }
  50.                 } catch (FileNotFoundException e) {
  51.                         e.printStackTrace();
  52.                 } catch (IOException e) {
  53.                         e.printStackTrace();
  54.                 }finally{
  55.                         try {
  56.                                 if(bis != null){
  57.                                         bis.close();
  58.                                         bis = null;
  59.                                 }                               
  60.                         } catch (IOException e) {
  61.                                 e.printStackTrace();
  62.                         }
  63.                         try {
  64.                                 if(bos != null){
  65.                                         bos.close();
  66.                                         bos = null;
  67.                                 }                               
  68.                         } catch (IOException e) {
  69.                                 e.printStackTrace();
  70.                         }
  71.                        
  72.                 }
  73.         }
  74.        
  75.         /**
  76.          * 变更文件名称,获得复制文件的目的文件名称
  77.          * @param file
  78.          * @return
  79.          */
  80.         public static File changeName(File file){
  81.                 String[] strs = file.getAbsolutePath().split("\\\\");               
  82.                 String str = strs[strs.length -1];
  83.                 StringBuffer sb = new StringBuffer(str);
  84.                 Pattern p = Pattern.compile("([0-9]+)[\\w]+");//正则表达式的应用
  85.                 Matcher m = p.matcher(str);
  86.                 if(m.find()){                       
  87.                         sb.insert(sb.lastIndexOf(".java"), m.group(1));
  88.                 }
  89.                
  90.                 //通过文件路径的父路径和改变好的目的文件名称创建新的文件路径
  91.                 return new File(file.getParent() + File.separator + sb.toString());
  92.         }

  93. }
复制代码
运行结果在我电脑上是成功的,不知道怎么上传图片 所以就没截图了
作者: Rainbow    时间: 2013-7-8 11:07
看下啦,努力赚分
作者: Rainbow    时间: 2013-7-8 11:29
  1. import java.util.Scanner;


  2. public class Demo2 {
  3.         public static void main(String[] args) {
  4.                 Scanner sc = new Scanner(System.in);//用户键盘输入数字
  5.                 System.out.println("请输入你想分解的数字");
  6.                         int number = sc.nextInt();//控制台获得想分解的数字
  7.                         int z = 2;//2为最小质数
  8.                 while (number> z) {
  9.                     if (number % z== 0) {//但number能被k整除,则应打印出z的值
  10.                         System.out.print(z+"x");
  11.                         }
  12.                     number = number / z;//并用number除以z的结果,作为新的数number,重复执行循环里的步骤
  13.                    
  14.                     if (number % z != 0) {//(3)如果number不能被z整除,则用z+1作为k的值,重复执行循环里的步骤
  15.                         z++;
  16.                     }
  17.                 }
  18.                 System.out.println(z);
  19.             }
  20.         }
  21.    
复制代码

作者: longlangcx    时间: 2013-7-8 12:15
第一次回复发表于31#  昨天 21:49~
该中饭了,先发前两道~

第一题
  1. import java.util.Scanner;

  2. /*
  3. * 题目1:键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  4. *
  5. * 分析:  应用递归的方法求解。
  6. *       从2开始取模数对录入的正整数进行取模,如果模为零,则二者相除的结果作为被模数继续递归取模,
  7. *       如果模不为0,则被模数不变,模数加1,继续递归,直到模数增加到被模数的1/2以上。
  8. *
  9. */
  10. public class Test1 {

  11.         public static void main(String[] args) {
  12.                 //从控制台获取一个整数
  13.                 Scanner in = new Scanner(System.in);
  14.                 System.out.print("请输入一个正整数:");
  15.                 int i = in.nextInt();
  16.                 //调用递归方法获取结果
  17.                 diGui(i,2,i);
  18.         }
  19.         /**
  20.          * 递归方法,将输入的正整数进行分解为质因数并输出
  21.          * @param a 被模数
  22.          * @param b 模数
  23.          * @param x 控制台输入的原值
  24.          */
  25.        
  26.         //只为完成题目要求,就private好了。
  27.         private static void diGui(int a, int b, final int x){
  28.                 //结束条件:当b大于a的一半时输出最后一个被模数,如果被模数一直无变化,说明是质数。
  29.                 if(a < b * 2){
  30.                         if(a != x)
  31.                                 System.out.println(a);
  32.                         else
  33.                                 System.out.println("您输入的是一个质数,无法分解");
  34.                         return;
  35.                 }
  36.                 //如果可整除,则继续用此数进行递归,否则将被模数+1。
  37.                 else if(a % b == 0){
  38.                         if(a == x)
  39.                                 System.out.print(x + "= ");
  40.                         System.out.print(b + "* ");
  41.                         diGui(a / b, b, x);
  42.                 }else
  43.                         diGui(a, b + 1, x);
  44.         }
  45. }/* Output:
  46. 请输入一个正整数:90
  47. 90= 2* 3* 3* 5
  48. *///:~
复制代码
第二题
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Random;


  4. /*
  5. * 题目2:求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。
  6. * (其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  7. *  这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。
  8. *   (随机添加的素数,可手动指定,也可利用随机方法产生)
  9. *  (注:存入数组后,数组中的所有元素理论上是无序的,相同的那个素数不一定就等于a[n],
  10. *  而是被存入了数组中的某个角标上)
  11. *
  12. * 分析: 首先要找出1-100之间的素数。素数的判断可以用二重循环嵌套,也可以用递归,这里用
  13. *       for循环嵌套,外层枚举数,内层枚举2~sqrt(外层数字)之间的数对外层数取模。内层枚举结束
  14. *       依然没找到模0的数则外层为素数。
  15. *      
  16. *       因为找到的素数不是直接打印而是放在数组中,而查找过程结束前找到的素数个数未知,
  17. *       因此使用ArrayList临时存放找到的素数,之后根据ArrayList中元素的个数确定数组大小,再
  18. *       将其移动到数组内。
  19. *      
  20. *       因为要在数组中添加一个重复的素数,所以数组大小可以定义为实际素数大小加1。再移入数组时,先
  21. *       随机产生一个角标,移入时跳过此位置,之后再在素数中随机找一个放入此位,至此a[n+1]数组就搞定了。
  22. *      
  23. *       之后要解决的就是如何在一个无序数组中找到重复元素,可以使用排序后临位比较的方法,但效率较低,
  24. *       因此可以使用类似选择排序的方式查找重复,但不进行换位操作,这样效率较高。
  25. *
  26. */

  27. public class Test2 {

  28.         public static void main(String[] args) {
  29.                 //定义一个ArrayList用于临时存储找到的素数
  30.                 ArrayList<Integer> list = new ArrayList<Integer>();
  31.                
  32.                 //嵌套循环寻找素数,找到后插入到list中,模数限定不大于被模数的平方根,以提高效率
  33.                 for(int i = 2; i <= 100; i++){
  34.                         for(int j = 2;; j++){
  35.                                 if(j > (int)Math.sqrt(i)){
  36.                                         list.add(i);
  37.                                         break;
  38.                                 }
  39.                                 if(i % j == 0)
  40.                                         break;
  41.                         }
  42.                 }
  43.                
  44.                 //输出找到的list,这里直接调用了list的toString方法。
  45.                 System.out.println("1-100之间的素数有:\n" + list);
  46.                
  47.                 //创建了一个int数组,大小为素数个数+1
  48.                 int size = list.size();
  49.                 int[] arr = new int[size + 1];
  50.                
  51.                 //生成随机数,randomNum为随机生成的1-100中的某素数,randomPos是插入数组中的位置
  52.                 //这样可以让每次运行时插入的数和插入的位置都不同
  53.                 Random rand = new Random();
  54.                 int randomNum = list.get(rand.nextInt(size));
  55.                 int randomPos = rand.nextInt(size);
  56.                
  57.                 //下面将ArrayList中的元素移动到数组中,在随机位插入随机素数,在尾位插入跳过的素数
  58.                 for(int i = 0; i < arr.length - 1; i++){
  59.                         if(i == randomPos){
  60.                                 arr[i] = randomNum;
  61.                                 continue;
  62.                         }
  63.                         arr[i] = list.get(i);
  64.                 }
  65.                 arr[arr.length - 1] = list.get(randomPos);
  66.                
  67.                 //输出完成插入后的数组
  68.                 System.out.println("插入随机素数之后的数组为:\n" + Arrays.toString(arr));
  69.                
  70.                 //使用类似选择排序的方式进行多次比较,但不交换元素的位置,即实际不排序
  71.                 for(int i = 0; i < arr.length -1; i++){
  72.                         for(int j = i + 1; j < arr.length; j++){
  73.                                 if(arr[i] == arr[j])
  74.                                         System.out.println("重复元素为" + arr[i] + " ,出现位置为角标" + i + "和角标" + j);
  75.                         }
  76.                 }
  77.         }
  78. }/* Output:
  79. 1-100之间的素数有:
  80. [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
  81. 插入随机素数之后的数组为:
  82. [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 11, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 47]
  83. 重复元素为11 ,出现位置为角标4和角标14
  84. *///:~
复制代码

作者: 王洪波    时间: 2013-7-8 12:30
本帖最后由 王洪波 于 2013-7-8 22:03 编辑

首先谢谢版主能够指出错误。
我重新改了下,如还有错,请再指出。
  1. package com.itheima.bbs.c5a3;

  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.Collections;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Random;

  9. /**
  10. * 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  11.       这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  12. */
  13. public class CopyOftest2
  14. {
  15.         public static void main(String[] args)
  16.         {       
  17.                 List<Integer> primes = new ArrayList<Integer>();
  18.                 primes.add(2);//2 为素数先加进去
  19.                 for(int i=3; i<=100; i+=2)
  20.                 {
  21.                         if(isPrime(i))
  22.                                 primes.add(i);
  23.                 }
  24.                 int size = primes.size();//原数组的大小
  25.                 Random random = new Random();
  26.                 //随机生成一个索引
  27.                 int index = random.nextInt(size);
  28.                 int s = primes.get(index);//额外添加的的素数
  29.                 System.out.println("额外添加的的相同素数"+s);
  30.                 //添加素数到随机位置
  31.                 int pos = random.nextInt(size);
  32.                 primes.add(pos, s);
  33.                 //输出结果
  34.                 printArray(primes);
  35.                 //找数组中相同的两个素数
  36.                 searchSame(primes);
  37.         }
  38.         /**
  39.          * 在集合list中查找元素i
  40.          */
  41.         private static void searchSame(List<Integer> list)
  42.         {       
  43.                 int index = -1;
  44.                 for(int i=1,size=list.size(); i<size; i++)
  45.                 {       
  46.                         //改动点:这里用二分查找相同元素,前面的元素可能是无序的,考虑不周.这里改成了用indexOf()去前边元素中找
  47.                         index = list.subList(0, i).indexOf(list.get(i));//从数组前边元素【0,i-1】中找
  48.                         if(-1 != index)//包含当前元素
  49.                         {
  50.                                 //找到了
  51.                                 System.out.println("位置"+i+"与位置"+index+"上的素数相同!都为:"+list.get(i));
  52.                                 return;
  53.                         }
  54.                 }
  55.                 System.out.println("没有找到相同元素!");
  56.         }
  57.         private static void printArray(List<Integer> primes)
  58.         {
  59.                 for(int i=1,size=primes.size(); i<=size; i++)
  60.                 {       
  61.                         //十个一行输出
  62.                                 System.out.print((i-1)+":"+primes.get(i-1)+" ");
  63.                                 if(i%10 == 0)
  64.                                         System.out.println();
  65.                 }
  66.                 System.out.println();
  67.         }

  68.         /**
  69.          * 判断i是否为素数
  70.          */
  71.         private static boolean isPrime(int i)
  72.         {       
  73.                 for(int j=2; j<i; j++)
  74.                 {
  75.                         if(i%j == 0)
  76.                                 return false;
  77.                 }
  78.                 return true;
  79.         }
  80. }
复制代码

作者: 刘一军    时间: 2013-7-8 12:32
先看题目
作者: 万琪    时间: 2013-7-8 13:17
水一下:lol
作者: camml    时间: 2013-7-8 13:30
这个必须顶
作者: 刘张朋    时间: 2013-7-8 15:04
抱着试试看的态度做了下,勉强做了第二、三题,不知道是否符合要求,但是对复习巩固确实很有效。第一题还是不会啊,还请多多指教哦。

          第二题:求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)

package com.itheima;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
/*思路:
* 1.求1到100之间的素数,首先应该有一个判断某数是否为素数的方法。
* 2.因为素数的个数n不确定,而要将其存放于数组,但是数组长度是固定的,如直接定义数组,
* 其长度无法准确定义,但是想到集合是可变长度的,且ArrayList可转换为数组,故使用
* ArrayList先存放数组元素,再转换为int数组。
* 3.要在素数数组中随机插入一个素数,可使用ArrayList的add(int index, E element) 方法,
* 其添加位置index有Random类随机产生。而添加的素数由手动键盘输入。
* 4.查找相同的那个素数可由两个for语句嵌套遍历数组得到。
*/
public class TestTwo {
/**
  * @param args
  * @throws Exception
  */
public static void main(String[] args) throws Exception {
  
  //调用getPrimeToList方法。得到素数对应Integer组成的ArrayList集合
  ArrayList<Integer> al = primeToList();
  //调用listToArray(ArrayList<Integer> al)方法,将al转换成int[];
  int[] arr = listToArray(al);//如输入的不是数字,会产生异常
  String prime = getAlikeEle(arr);
  System.out.println(prime);

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

//在ArrayList集合中随机插入录入的素数,并返回一个Object数组
public static int[] listToArray(ArrayList<Integer> al)throws Exception{
  //产生一个位于在al角标内的随机数,用于指定素数插入的位置
  int r = new Random().nextInt(al.size()-1);
  
  //创建键盘输入流,读取键盘录入的素数的字符串表示形式。
  BufferedReader bufr =
    new BufferedReader(new InputStreamReader(System.in));
  
  //读取键盘录入,去除两端空格。
  String line = bufr.readLine().trim();
  //如果输入为null,或者不是纯数字,报异常
  if((line==null) && (line.matches("\\d{1,3}")))
   throw new RuntimeException("输入的不是数字");
  //将int类型的字符串转换为Integer对象
  Integer insertPrime = Integer.valueOf(line);
  
  //判断输入的数字是否为1到100间的素数,如不是直接报异常
  int a = insertPrime;
  if(a<1 || a>100 || !(TestTwo.isPrime(a)))
   throw new RuntimeException("输入的素数不是1到100间的素数");
  
  
  //将输入的素数随机插入al集合中
  al.add(r, insertPrime);
  
  //遍历Object[]将其转换为int数组
  int[] arr = new int[al.size()];
  for(int i=0;i<al.size();i++){
   arr = al.get(i);
  }
  return arr;
}


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

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

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

  int x = (int) Math.ceil(Math.sqrt(num));
  for(int i=2;i*i<=x;i++){
   if(num%i==0)
    return false; //num有1和其本身以外的因子,故不是素数
  }
  return true; //num没有1和其本身以外的因子,故不是素数
}
}


         第三题:在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
  要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
(其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)

package com.itheima;
import java.io.*;
/*
* 思路分析:
*1.复制.java文件用FileReader和FileWriter,可加BufferedReader和BufferedWriter提高效率。
*2. 同时因为只复制.java文件,需要进行文件过滤,用File对象的
*  File[] listFiles(FilenameFilter filter) 方法获取.java文件对象。
* 这里不采用获取文件名的方式,因为要判断.java文件不是目录,而是文件,同时在读取流读取的时候也可直接使用。
*3.获取文件名前面的数字,加到原文件名的.java前面。
*4.将数据写到新文件名对应的目标文件中
*/
public class TestThree {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  File file = new File("F:\\");
  if(!(file.exists()&&file.isDirectory()))
   throw new NullPointerException("路径有误"); //如给定的文件夹不存在,抛异常
  
  //new一个本类对象调用复制文件的方法
  new TestThree().copyJava(file);
}
//实现.java文件复制的方法,此方法只能实现复制后的文件仍处于原文件夹内
public void copyJava(File file){
  //获取.java文件对象,需传入一个过滤器,并将对象存入一个File数组中
  File[] files = file.listFiles(new FilterByJava());

  //定义读取流和写入流,因操作文本文件,用字符流缓冲区提高效率
  BufferedReader bufr = null;
  BufferedWriter bufw = null;

  //for循环实现对每一个.java文件的读写
  for(File srcFile : files){
   
   if(srcFile.isDirectory()) //如果srcFile是一个后缀为.java的目录
    continue;    //不再复制,而继续遍历下一个文件。
   
   //获取复制的目的地,并用正则表达式获取写入目的地的字符串表示,即copyName
   String[] sfile = srcFile.getAbsolutePath().split("\\.");
   String copyName = sfile[0].replaceAll("((\\d+)(.)+)","$1$2")+".java";   
   File desFile = new File(copyName);
   
   try{   
    bufr = new BufferedReader(new FileReader(srcFile));
    bufw = new BufferedWriter(new FileWriter(desFile));
    String line = null;
   
    //频繁的读写操作
    while((line=bufr.readLine())!=null){
     bufw.write(line);
     bufw.newLine();
     bufw.flush();
    }
   }
   catch(IOException e){
    throw new RuntimeException("文件复制失败!");
   }
   finally{
    try {
     if(bufw!=null)
      bufw.close();
    }
    catch (IOException ex1) {
      // TODO Auto-generated catch block
      throw new RuntimeException("写入流关闭异常");
    }
    finally{
     if(bufr!=null)
      try{
       bufr.close();
      }
      catch(IOException ex2){
       throw new RuntimeException("读取流关闭异常");
      }
    }
   }
  }
}
}
/**按文件名过滤.java文件
* */
class FilterByJava implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
  // TODO Auto-generated method stub
  return name.endsWith(".java");
}

}

itheima.zip

3.83 KB, 阅读权限: 100, 下载次数: 0


作者: camml    时间: 2013-7-8 15:07
本帖最后由 camml 于 2013-7-8 15:14 编辑
  1. import java.util.*;
  2. class Demo1{
  3.         public static void main(String[] args){
  4.                  //输入一个正整数,并赋值给x
  5.                 int x;
  6.                 Scanner in = new Scanner(System.in);
  7.                 System.out.print("请输入一个正整数:");
  8.                 x = in.nextInt();
  9.                //匿名初始化一个对象
  10.                new PrimeSplit(x);
  11.        }
  12. }
  13. class PrimeSplit{
  14.         //将最小的质数赋值给k
  15.        int k = 2;
  16.        public PrimeSplit(int x){
  17.                 //当输入的是1或2时特殊处理
  18.                if(x<=1){
  19.                      System.out.println(x+"是无效的被分解数");
  20.                }
  21.                else if(x==2){
  22.                     System.out.println(x+"分解后的质因数为: 1*"+x);
  23.                }else {
  24.                     //1是所有的正整数的质数,后面和输出语句相连
  25.                     System.out.print(x+"分解后的质因数为: 1");
  26.                      while(k<=x){
  27.                            //输入的数除以最小质数后重新循环
  28.                           if(x%k==0){
  29.                                   System.out.print("*"+k);
  30.                                   x = x/k;
  31.                           }
  32.              //如果k不能被x整除,就将k++
  33.             else{
  34.                 k++;
  35.             }
  36.          }
  37.       }
  38.   }
  39. }
复制代码

作者: Rainbow    时间: 2013-7-8 15:54
  1. package day06静态;
  2. import java.util.Scanner;


  3. public class Demo2 {
  4.         public static void main(String[] args) {
  5.                 Scanner sc = new Scanner(System.in);//用户键盘输入数字
  6.                 System.out.println("请输入你想分解的数字");
  7.                         int number = sc.nextInt();//控制台获得想分解的数字
  8.                         int z = 2;//2为最小质数
  9.                 while (number> z) {
  10.                     if (number % z== 0) {//但number能被k整除,则应打印出z的值
  11.                         System.out.print(z+"x");
  12.                         number = number / z;//并用number除以z的结果,作为新的数number,重复执行循环里的步骤
  13.                         }
  14.                     
  15.                     
  16.                     if (number % z != 0) {//(3)如果number不能被z整除,则用z+1作为k的值,重复执行循环里的步骤
  17.                         z++;
  18.                     }
  19.                 }
  20.                 System.out.println(z);
  21.             }
  22.         }
  23.    
复制代码
刚刚看了一下,number = number / z;  应该放在if循环里面,保证可以整除最小质数。
作者: 蚂蚁搬家    时间: 2013-7-8 19:29
哥们儿,我是39楼的,帖子地址:http://bbs.itheima.com/forum.php ... 9314&pid=399428
你说我的第三题测试时出现角标越界异常,我运行了几遍没问题啊,用Eclipse和直接用cmd运行都没问题啊,都可以正常复制文件,
不知道你运行时出问题的语句在哪一行?
我把第三题的代码再贴一次,你看一下
  1. /*
  2. 在一个文件夹内有文件夹和文件,文件名的格式为:数字+daxiang.java。
  3. 要求:把所有的.java文件复制一份,变为文件名格式为:数字+daxiang+数字.java。
  4. (其中数字是相对应的,名称由字母组成。在本例中,文件名应该由"数字+daxiang.java"变为"数字+daxiang+数字.java")
  5. */
  6. /*
  7. 基本思路:1,用递归方法获取到源目录下的java文件;
  8. 2,用缓冲流将源文件复制到目的文件夹下的目的文件;
  9. 3,用字符串的split方法拆分并重新组合出目的文件的文件名;
  10. @author:蚂蚁搬家;
  11. */

  12. import java.io.*;

  13. public class CopyFile
  14. {
  15.                 public static void main(String [] args)
  16.                 {
  17.                                 File file = new File("F:\\答题有分");                        //源文件夹封装为File对象;
  18.                                 get(file);                                                                                                                                //调用get方法实现题目要求;
  19.                 }
  20.                
  21.                 /*用递归方法获取源目录下的每个java文件,然后调用copyFile方法,将源文件复制到另一个文件夹中,
  22.                 并对文件按照题目要求进行更名;*/
  23.                 public static void get(File srcFile)                                
  24.                 {
  25.                                 File[] files  = srcFile.listFiles();                //列出源目录下的所有文件和目录;
  26.                                
  27.                                 for(File file : files)
  28.                                 {
  29.                                         if(file.isDirectory())                                //如果是目录,递归调用get方法;
  30.                                         {
  31.                                                         get(file);
  32.                                         }       
  33.                                         else
  34.                                         {
  35.                                                 if(file.getName().endsWith(".java"))                //如果是java文件,调用copyFile方法;
  36.                                                 {
  37.                                                         copyFile(file);       
  38.                                                 }
  39.                                         }
  40.                                 }
  41.                 }
  42.                
  43.                 //将源文件复制到目的文件夹,并对源文件按照题目要求更名;
  44.                 public static void copyFile(File file)
  45.                 {
  46.                                 BufferedReader br = null;
  47.                                 BufferedWriter bw = null;
  48.                                 try
  49.                                 {
  50.                                                 br = new BufferedReader(new FileReader(file));
  51.                                                
  52.                                                 String srcName = file.getName();                //获取源文件的文件名;
  53.                                                 String[] tempName = srcName.split("daxiang");         //将源文件名用“daxiang”拆分,拆分出来的结果是“数字”和“.java”;
  54.                                                 String lastedName = tempName[0] + "daxiang" + tempName[0] + tempName[1];        //重新组合出来的结果就是"数字+daxiang+数字.java";
  55.                                                
  56.                                                 bw = new BufferedWriter(new FileWriter("F:\\目标文件夹\\" + lastedName));
  57.                                                
  58.                                                 String buf = null;
  59.                                                 while((buf = br.readLine()) != null)
  60.                                                 {
  61.                                                         bw.write(buf);
  62.                                                         bw.newLine();
  63.                                                         bw.flush();       
  64.                                                 }
  65.                                 }
  66.                                 catch(IOException e)
  67.                                 {
  68.                                         System.out.println("文件复制失败!");       
  69.                                 }
  70.                                
  71.                                 finally
  72.                                 {
  73.                                         try
  74.                                         {
  75.                                                         if(br != null)
  76.                                                                 br.close();
  77.                                         }       
  78.                                         catch(IOException e)
  79.                                         {
  80.                                                        
  81.                                         }
  82.                                        
  83.                                         try
  84.                                         {
  85.                                                 if(bw != null)
  86.                                                 bw.close();       
  87.                                         }
  88.                                         catch(IOException e)
  89.                                         {
  90.                                                        
  91.                                         }
  92.                                 }
  93.                 }
  94. }

  95.        

复制代码

作者: longlangcx    时间: 2013-7-8 20:00
下午有事耽搁了~还好时间还没到~第一次回复发表于31#  昨天 21:49~

补发下第三题:

  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. *        件名进行连接之后,即可获得新文件名。
  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结尾并包含数字
  37.                 //通过调用过滤器对象,将符合条件的.java文件的文件名存入一个字符串数组list中
  38.                 String[] list = pathFile.list(new FilenameFilter(){
  39.                         @Override
  40.                         public boolean accept(File dir, String name) {
  41.                                 return (name.endsWith("java")) && (name.split("\\D+").length != 0);
  42.                         }
  43.                 });
  44.                
  45.                 //遍历java文件清单,将其中的所有.java文件改名复制到同一个文件夹中。
  46.                 //copyFile为自定义的赋值单个文件的方法。
  47.                 //改名过程调用了自定义的getNewName方法。
  48.                 for(String s : list){
  49.                         String fullPath = path + "/" + s;
  50.                         copyFile(fullPath, path + "/" + getNewName(s));
  51.                 }
  52.         }
  53.        
  54.         /**
  55.          * 此方法用于将指定的字符串结尾处的数字连接到原文件名的开始,生成新的字符串
  56.          * @param name 要处理的原字符串
  57.          * @return 返回处理后的字符串
  58.          */
  59.         private static String getNewName(String name){
  60.                 String[] strArr = name.split("\\D+");
  61.                 return strArr[1] + name;
  62.         }

  63.         /**        
  64.          * 此方法用于复制单个文件
  65.          * @param oldPath 原文件路径
  66.          * @param newPath 复制后路径         
  67.          */      
  68.         public static void copyFile(String oldPath, String newPath) {
  69.                 try {
  70.                         //设置文件输入输出流
  71.                         FileInputStream in = new FileInputStream(oldPath);         
  72.                         FileOutputStream out = new FileOutputStream(newPath);
  73.                        
  74.                         //1kb的byte数组
  75.                         byte[] buffer = new byte[1024];
  76.                         //循环读取数据,直至读空位置
  77.                         while ( (in.read(buffer)) != -1) {
  78.                                         out.write(buffer);
  79.                         }
  80.                         //关闭流
  81.                         in.close();
  82.                 }catch (Exception e) {              
  83.                         System.out.println("复制文件过程中出错");
  84.                         e.printStackTrace();
  85.                 }
  86.         }
  87. }
复制代码
技术分马上要够了~~求助攻~~{:soso_e142:}
作者: 王楚鑫    时间: 2013-7-8 20:54
明早要考试啊、、、悲催、、我是看题呢还是看题呢还是看题呢还是看题呢
作者: 黄少海    时间: 2013-7-8 20:55
第二题
  1. /**
  2. * 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  3. *这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  4. *
  5. *思路 :1先求出1-100中素数的个数n.建立长度为n+1的数组.
  6. *          2循环判断1到100中的数,是素数就存入数组中.
  7. *          3手动添加一个11的素数到数组a[n+1]中.
  8. *          4输出相同数的角标.
  9. */

  10. package a0703;

  11. public class Exam2 {

  12.         public static void main(String[] args) {
  13.                 int  n= 0;//素数的个数
  14.                 for (int i = 2; i <= 100; i++) {
  15.                         if (isPrime(i)) {
  16.                                 n++;        //计算数组长度;               
  17.                         }
  18.                 }
  19.                
  20.                 int [] a= new int [n+1];//数组长度
  21.                 a[n] = 11;   //手动添加一个素数11到数组中.
  22.                 n = 0;
  23.                 for (int i = 2; i <= 100; i++) {
  24.                         if (isPrime(i)) { //调用质数判断函数
  25.                                 a[n] = i;        //i是质数存入数组中
  26.                                 n++;                //
  27.                         }
  28.                 }       
  29.                
  30.                 for (int x = 0; x < a.length-1; x++) {//每个元素分别和比他角标大的元素进行比较
  31.                         for(int y = 1; y < a.length; y++) {
  32.                                 if (a[x] == a[y] && x != y) {  //两个数相等并且角标不一样
  33.                                         System.out.println("在数组角标为:"+x+"和"+y+"的两个元素相等");
  34.                                 }
  35.                         }
  36.                 }
  37.         }
  38.        
  39.         /**判定一个数是否是质数
  40.          * @param int n 接收一个int类型的变量。       
  41.          * @return false 这个数不是质数
  42.          *                         true 这个数是质数
  43.          */
  44.         private static boolean isPrime(int n) {//判定一个数是否是质数

  45.                 for(int i=2; i<=Math.sqrt(n); i++){
  46.                         if(n%i==0){
  47.                                 return false;
  48.                         }
  49.                 }
  50.                 return true;
  51.         }
  52. }
复制代码

作者: 肥猫    时间: 2013-7-8 20:57
本帖最后由 肥猫 于 2013-7-8 21:08 编辑

第二题上交...
  1. /**
  2. 功能:求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。
  3. (其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  4. 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。
  5. (随机添加的素数,可手动指定,也可利用随机方法产生)
  6. author:肥猫
  7. */

  8. import java.util.*;

  9. class Test333
  10. {
  11.       public static void main(String[] args)
  12.       {
  13.             ArrayList<Integer> al = new ArrayList<Integer>();//先定义一个底层基于数组的容器来存储1-100的素数。
  14.             al.add(2);//由于素数本身的意义所以需要手动添加第一个元素2。
  15.             boolean b = false;
  16.             for(int i =2;i<=100;i++)//双重循环找出符合条件的素数并添加到容器中。
  17.            {
  18.                   for(int j =2;j<i;j++)
  19.                  {
  20.                        if(i%j==0)
  21.                       {
  22.                            b=false;
  23.                            break;
  24.                        }
  25.                        else
  26.                             b=true;
  27.                 }
  28.                 if(b)
  29.                 {
  30.                      al.add(i);
  31.                 }
  32.            }
  33.             int x=al.size()+1;
  34.             int[] a = new int[x];//根据容器的大小动态初始化数组。
  35.             for(int k=0;k<x-1;k++)
  36.            {
  37.                  a[k]=al.get(k);//将集合容器的值赋到数组中。
  38.             }
  39.             System.out.println("数组的长度是:"+a.length);
  40.             int key =a[(int)(Math.random()*(x-2))];//利用角标,随即抽取前面的角标将获得的值置于最后一位。
  41.             a[x-1]=key;
  42.             System.out.println("随机到的质数为:"+key);
  43.             System.out.print("数组:");
  44.             for(int l=0;l<a.length;l++){//遍历数组并输出以便于用二分法对其查找。
  45.             if(a[l]==key&&l!=x-1)
  46.            {
  47.                  System.out.print(a[l] +",");
  48.            }
  49.            else if(a[l]==a[x-1])
  50.            {
  51.                  System.out.println(a[l]);
  52.            }
  53.            else
  54.            {
  55.                  System.out.print(a[l]+",");
  56.            }
  57. }
  58. System.out.print("查找元素的索引是:");
  59. System.out.println(Arrays.binarySearch(a,0,x-1,key));//二分法对数组查找其索引。
  60. }
  61. }
复制代码



作者: Rainbow    时间: 2013-7-8 20:58
  1. package day06静态;
  2. import java.util.Scanner;


  3. public class Demo2 {
  4.         public static void main(String[] args) {
  5.                 Scanner sc = new Scanner(System.in);//用户键盘输入数字
  6.                 System.out.println("请输入你想分解的数字");
  7.                         int number = sc.nextInt();//控制台获得想分解的数字
  8.                         int z = 2;//2为最小质数
  9.                  if(number<z){
  10.                                 System.out.println("您输入的值有误,请输入<=2的正整数");
  11.                                 return;
  12.                  }
  13.                 while (number> z) {
  14.                     if (number % z== 0) {//但number能被k整除,则应打印出z的值
  15.                         System.out.print(z+"x");
  16.                         number = number / z;//并用number除以z的结果,作为新的数number,重复执行循环里的步骤
  17.                         }
  18.                     
  19.                     
  20.                     if (number % z != 0) {//(3)如果number不能被z整除,则用z+1作为k的值,重复执行循环里的步骤
  21.                         z++;
  22.                     }
  23.                 }
  24.                
  25.                 System.out.println(z);
  26.             }
  27.         }
  28.    
复制代码
考虑的不够全面,版主帮忙看下,如果有错误会继续改正的,下面的题争取严谨!
作者: sunriselzz    时间: 2013-7-8 21:00
看看,学习学习
作者: 陈昊    时间: 2013-7-8 21:02
给力啊,试试再说
作者: 以防万一    时间: 2013-7-8 21:14
我想试试、、、、、、、阿门。
作者: 王冬    时间: 2013-7-8 21:20
{:2_34:}{:2_33:}
作者: 王楚鑫    时间: 2013-7-8 21:37
第一题
  1. /*

  2. 1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。

  3. */


  4. import java.util.*;
  5. public class Factors

  6. {

  7.         public static void main(String args[])

  8.         {

  9.                 int i;
  10.                 Scanner sc = new Scanner(System.in);
  11.                 int n=Integer.parseInt(sc.nextLine());        //实现从键盘输入一个正整数       
  12.                 System.out.print(n+"=");
  13.                

  14. for(i=2;i<n;i++) //分解质因数、从除1外最小的质数开始循环

  15.                 {

  16.                         while(n!=i) //如果这个质数恰等于n,则说明分解质因数的过程已经结束,        否则进行分解                       

  17.                         {

  18.                                 if(n%i==0) //取i余0说明i是一个因数、输出该质因数

  19.                                 {

  20.                                         System.out.print(i+"x");

  21.                                         n=n/i;//控制循环、操作与i相对的另一个因数是否是质数、不是质数即循环进行分解
  22.                                
  23. }
  24.                                
  25. else

  26.                                         break;
  27.                        
  28. }
  29.                
  30. }

  31.                 System.out.print(n); //输出使循环结束的质因数

  32.         }

  33. }
复制代码
运行截图


第三周1.jpg (4.49 KB, 下载次数: 0)

第三周1.jpg

作者: 陈昊    时间: 2013-7-8 21:48
怎么设置
作者: 陈昊    时间: 2013-7-8 21:49
import java.util.Scanner;
public class FenJie{
   public static void main(String[] args){
         System.out.println("请输入一个正整数:");
     Scanner sc = new Scanner(System.in);
     int n = sc.nextInt();
     int a=2;
     if(n<=1){//当n小于等于1的时候,数字不能分解。
       System.out.println("被分解数无效,请重新输入");
       return;
     }
     if(n==a){//当分解数为a时,分解的因数为1与他本身相乘。
       System.out.println(n+"="+"1*"+n);
     }
     if(n>a){//当n>a时,打印分解数n=;
       System.out.print(n+"=1");
       while(n>=a){
          if(n%a==0){
n=n/a;//当n%a余数为0,且n/a为它本身的时候打印出*和a的值
             System.out.print("*"+a);


           
          }
          else{
             a=a+1;//a+1的值赋值给a.
          }
       }
     }


      System.out.println("");
   }


}
作者: 一木榜公    时间: 2013-7-8 21:55
瞅瞅……巩固知识
作者: 王洪波    时间: 2013-7-8 21:58
王洪波 发表于 2013-7-8 12:30
这是改后的,请指教:

首先谢谢版主能够指出错误之处。
我改了下,如若再有错误,望不悋指出。
  1. package com.itheima.bbs.c5a3;

  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.Collections;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Random;

  9. /**
  10. * 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  11.       这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  12. */
  13. public class CopyOftest2
  14. {
  15.         public static void main(String[] args)
  16.         {       
  17.                 List<Integer> primes = new ArrayList<Integer>();
  18.                 primes.add(2);//2 为素数先加进去
  19.                 for(int i=3; i<=100; i+=2)
  20.                 {
  21.                         if(isPrime(i))
  22.                                 primes.add(i);
  23.                 }
  24.                 int size = primes.size();//原数组的大小
  25.                 Random random = new Random();
  26.                 //随机生成一个索引
  27.                 int index = random.nextInt(size);
  28.                 int s = primes.get(index);//额外添加的的素数
  29.                 System.out.println("额外添加的的相同素数"+s);
  30.                 //添加素数到随机位置
  31.                 int pos = random.nextInt(size);
  32.                 primes.add(pos, s);
  33.                 //输出结果
  34.                 printArray(primes);
  35.                 //找数组中相同的两个素数
  36.                 searchSame(primes);
  37.         }
  38.         /**
  39.          * 在集合list中查找元素i
  40.          */
  41.         private static void searchSame(List<Integer> list)
  42.         {       
  43.                 int index = -1;
  44.                 for(int i=1,size=list.size(); i<size; i++)
  45.                 {       
  46.                         //改动点:这里用二分查找相同元素,前面的元素可能是无序的,考虑不周.这里改成了用indexOf()去前边元素中找
  47.                         index = list.subList(0, i).indexOf(list.get(i));//从数组前边元素【0,i-1】中找
  48.                         if(-1 != index)//包含当前元素
  49.                         {
  50.                                 //找到了
  51.                                 System.out.println("位置"+i+"与位置"+index+"上的素数相同!都为:"+list.get(i));
  52.                                 return;
  53.                         }
  54.                 }
  55.                 System.out.println("没有找到相同元素!");
  56.         }
  57.         private static void printArray(List<Integer> primes)
  58.         {
  59.                 for(int i=1,size=primes.size(); i<=size; i++)
  60.                 {       
  61.                         //十个一行输出
  62.                                 System.out.print((i-1)+":"+primes.get(i-1)+" ");
  63.                                 if(i%10 == 0)
  64.                                         System.out.println();
  65.                 }
  66.                 System.out.println();
  67.         }

  68.         /**
  69.          * 判断i是否为素数
  70.          */
  71.         private static boolean isPrime(int i)
  72.         {       
  73.                 for(int j=2; j<i; j++)
  74.                 {
  75.                         if(i%j == 0)
  76.                                 return false;
  77.                 }
  78.                 return true;
  79.         }
  80. }
复制代码

作者: qdlglibin    时间: 2013-7-8 22:15
看看题~~~~~~~~~
作者: qdlglibin    时间: 2013-7-8 22:16
看看题~~~~~~~~~
作者: qdlglibin    时间: 2013-7-8 22:16
{:soso_e130:}{:soso_e130:}
作者: qdlglibin    时间: 2013-7-8 22:27
{:soso_e102:}{:soso_e102:}

作者: 以防万一    时间: 2013-7-8 22:32
本帖最后由 咦,我盗了太阳 于 2013-7-9 15:11 编辑

好吧,我是第一次动脑子去想一个Java问题,虽然过程有点苦逼,没按要求用数组,但是我写出来了

继续努力咯

以后要经常参加这种活动才行啊
既锻炼了代码的灵活性也得到了分
嘿嘿
加油!
  1. /*打印输出一百以内的素数

  2. 1,遍历1-100的数,使用for循环进行遍历

  3. 2,判断这个数是不是素数,是就打印出来

  4. */

  5. class sushu
  6. {
  7. public static void main(String[] args)
  8. {
  9. //素数:指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。
  10. int j;
  11. for(int i=1;i<=100;i++)
  12. {
  13. for(j=2;j<=i-1;j++)
  14. {
  15. if(i%j==0)
  16. break;
  17. }
  18. if(j>=i-1&&i>1)
  19. {

  20. System.out.print(i+",");
  21. }
  22. }
  23. }
  24. }
复制代码
结果:

QQ截图20130708222818.png (1.25 KB, 下载次数: 0)

QQ截图20130708222818.png

作者: qdlglibin    时间: 2013-7-8 22:37

作者: 亲雨泽    时间: 2013-7-8 23:16
看看题目啊
作者: 一木榜公    时间: 2013-7-9 00:07
本帖最后由 一木榜公 于 2013-7-9 00:09 编辑
  1. /*
  2. 第1题: 键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。

  3. 思路:
  4. 1.用哪个函数实现从键盘接收一个整数:Integer.parseInt(arg[0]);
  5. 2.怎么将其分解质因数?质因数就是质数因子,最小质数为2.任何合数都能分解成几个质数相乘
  6. 如:18 = 2 * 3 *3 ,36 = 2*2*3*3,105 = 3*5*7,

  7. 发现:
  8. 1,36如果被最小质数2除起,能被整除,商继续除2,直到不能被2整除,就2加1,再与3除,
  9. 能被整除,其商再与3除,以此类推……可求出质因子。
  10. 2,大于18的整数肯定不能与36整除,也就是不可能是他的质因子。
  11. */

  12. class  TestDemo
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 // 接收键盘输入的正整数
  17.                 int x;      
  18.                 x = Integer.parseInt(args[0]);

  19.                  // 判断输入的是否为正整数
  20.                 if( x <= 0)
  21.                 {
  22.                         System.out.println("输入错误!所输入的数不是正整数。");
  23.                         return;
  24.                 }


  25.                 //记录x与质因数相除后的商
  26.                 int n = x;  
  27.                 int[] zishu = new int[32]; // 存放质因子数组
  28.                 int p = 0;      // 操作数组的角标
  29.                 for(int i = 2; i <= x/2; i++)
  30.                 {
  31.                         
  32.                         /*
  33.                         **  i能被n整除就将i输出,并求其商,直到i不能被n整除退出循环
  34.                         */
  35.                         while(n%i==0)
  36.                         {
  37.                                 zishu[p++] = i;
  38.                                 n = n/i;
  39.                         }
  40.                 }

  41.                 //判断是否有质因数,有打印质数因子
  42.                 if(n==x)
  43.                         System.out.println(x+"这个正整数不存在质因数!");
  44.                 else
  45.                 {
  46.                         //数组遍历
  47.                         System.out.print(x+"=");
  48.                         for(int j = 0; j < p; j++)
  49.                         {
  50.                                 if(j != p-1)
  51.                                 {
  52.                                         System.out.print(zishu[j]+"*");
  53.                                 }
  54.                                 else
  55.                                         System.out.println(zishu[j]);
  56.                         }
  57.                 }


  58.                         

  59.         }
  60. }
复制代码
编译结果:

作者: ytblght55    时间: 2013-7-9 00:10
凑个热闹!!!
作者: 王安琪    时间: 2013-7-9 00:12
貌似来的有点晚啊
作者: 黄少海    时间: 2013-7-9 01:44
白天没时间在上课没时间上网.晚上加班加点搞出来.望楼主见谅啊! 第三题文件名没改出来.不过新加了一个功能可以复制自定义后缀的文件.
  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)

源目录

源目录

作者: 秦兰之    时间: 2013-7-9 04:41
  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. }
复制代码

作者: 刘张朋    时间: 2013-7-9 08:39
刘张朋 发表于 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 09:11
刘张朋 发表于 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 09:18
刘张朋 发表于 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. }
复制代码


作者: 以防万一    时间: 2013-7-9 10:03
咦,我盗了太阳 发表于 2013-7-8 22:32
好吧,我是第一次动脑子去想一个Java问题,虽然过程有点苦逼,但是我写出来了

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

额,,,,,,,,好吧,题错了,是第二题,,,,,忘记了
作者: 方珂    时间: 2013-7-9 10:13
来做做题目~
作者: longlangcx    时间: 2013-7-9 12:09
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.在文件复制的方法中,添加了文件存在判断,当改名后的文件存在时跳过复制并给出提示,否则就把复制的内容添加到这个已存在文件的后面去了。
作者: 杨彬    时间: 2013-7-9 15:21
技术分啊
作者: 星仔子    时间: 2013-7-9 15:35
瞅瞅啊,膜拜,学习,提高,练习。

作者: 方珂    时间: 2013-7-9 17:07
第一题:
  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. }
复制代码
运行结果:


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



作者: 董延京    时间: 2013-7-9 18:10
来晚了哦
作者: 陈昊    时间: 2013-7-9 18:10
  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. }
复制代码

作者: 风乐    时间: 2013-7-9 18:22
看一看,瞧一瞧

作者: 一木榜公    时间: 2013-7-9 20:40
本帖最后由 一木榜公 于 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

作者: 一木榜公    时间: 2013-7-9 20:53
一木榜公 发表于 2013-7-9 00:07
编译结果:

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

程序中多了个判断是否存在正整数,所以才有了“7这个正整数不存在质因数”
作者: 朱晓杰    时间: 2013-7-9 23:03
俺来猫一猫,顺便顶楼主
作者: 杨彬    时间: 2013-7-9 23:16
版主你好,第一题代码如下
  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)

第一题运行结果

第一题运行结果

作者: 杨彬    时间: 2013-7-9 23:19
第二题代码如下
  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)

第二题运行结果

第二题运行结果

作者: 一木榜公    时间: 2013-7-10 08:38
一木榜公 发表于 2013-7-9 20:40
2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。
(其中n个是求出的各个素数,还有一 ...

白天看视频,晚上做题所以有点赶……呵呵




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2