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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

看看题。。。。
回复 使用道具 举报
  1. package org.openscience.zhoubo;
  2. //1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  3. import java.io.BufferedReader;

  4. import java.io.InputStreamReader;
  5. import java.util.ArrayList;

  6. public class exolodeInt {

  7.         /**
  8.          * @param args
  9.          * @throws Exception
  10.          */
  11.         public static void main(String[] args) throws Exception {
  12.                 // TODO Auto-generated method stub
  13.                 ArrayList<Integer> it = new ArrayList<Integer>();//用来存放分解后的数
  14.                 System.out.println("请输入一个大于1整数");
  15.                 StringBuilder conclution = new StringBuilder();//存放字符串
  16.                 BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
  17.                 String str = buf.readLine();// 键盘录入
  18.                 Long long1 = Long.parseLong(str);
  19.                 long tmp = long1;//临时储存long值
  20.                 for (int i = 2; i <= long1; i++) {
  21.                         if (long1%i==0) {
  22.                                 it.add(i);  // 如果整除,则将i记录下来 同时将值整除
  23.                                 long1 /=i;
  24.                                 i = 2;// 将i重新赋值后进行循环。
  25.                         }  
  26.                         else {
  27.                                 continue;//否则跳出循环,继续下一次
  28.                         }
  29.                 }
  30.                 int j = it.size();
  31.                 if (j==1) {
  32.                         System.out.println("这个数字不能分解");
  33.                 }
  34.                 else {
  35.                
  36.                         for(int i:it){
  37.                                 conclution.append(i+"*");
  38.                         }
  39.                         conclution.deleteCharAt(conclution.length()-1);
  40.                         System.out.println("该数分解后为"+tmp+"="+conclution);
  41.                 }
  42.                 }

  43.         }
复制代码

点评

输入4提示不能分解,输入12=2*3,代码有问题  发表于 2013-7-14 01:02
回复 使用道具 举报
  1. package org.openscience.zhoubo;

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

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

  10.         /**
  11.          * @param args
  12.          */
  13.         public static void main(String[] args) {
  14.                 // TODO Auto-generated method stub
  15.                 Random 随机数 = new Random();
  16.                 ArrayList<Integer> 集合 = new ArrayList<Integer>();//借助于这个主要是用它来模拟动态数组,防止预定义的空间不够。
  17.                 int count = 0;//计数器用来观察其中非0元素的个数
  18.                 for (int i = 2; i <=100; i++) {
  19.                         if(IS素数(i)){
  20.                                 集合.add(i);// 遍历100以内的数字,若是素数就放在集合中
  21.                         }
  22.                 }
  23.                
  24.                 for (int i:集合) {
  25.                         if(i != 0){
  26.                                 count++;
  27.                         }
  28.                        
  29.                 }
  30.                 int[] 数组 = new int[count+1];
  31.                 count=0;
  32.                 for(int i:集合){
  33.                 if(i != 0){
  34.                         数组[count]=i;//将a中不等于0的数组加入到里面
  35.                         count++;
  36.                 }
  37.                 }
  38.                 数组[count] = 数组[随机数.nextInt(count)];
  39.                 随机排序数组(数组);
  40.                 ArrayList<Integer> al2 = new ArrayList<Integer>();
  41.                 for (int i: 数组) {
  42.                         if(!al2.contains(i)){
  43.                                 al2.add(i);
  44.                         }
  45.                         else {
  46.                                 System.out.println("找到了  那个数是"+i);
  47.                         }
  48.                 }
  49.                
  50.                
  51.                

  52.         }
  53.         public static boolean IS素数(int n){
  54.                 for (int i = 2; i < n; i++) {
  55.                         if (n%i==0&&i!=n) {
  56.                                 return false;
  57.                         }
  58.                 }
  59.                 return true;
  60.                
  61.         }
  62.         public static void 随机排序数组(int[] a) {
  63.                 Random 随机数 = new Random();//随机数生成器
  64.                 int j,k,tmp;
  65.                 for(int i=0;i<=100;i++){// 随机生成角标 最后互换两个数字 生成乱序的数组;
  66.                         j=随机数.nextInt(a.length);
  67.                         k=随机数.nextInt(a.length);
  68.                         if(j!=k){
  69.                                 tmp = a[j];
  70.                                 a[j] = a[k];
  71.                                 a[k] = tmp;
  72.                                
  73.                         }
  74.                 }
  75.         }
  76. }
复制代码

评分

参与人数 1技术分 +3 收起 理由
神之梦 + 3 第一次见有人用汉字做变量来用的.

查看全部评分

回复 使用道具 举报
  1. package com.itcase.test;

  2. /**
  3. * 1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  4. */
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.util.ArrayList;
  9. import java.util.List;

  10. public class PrimeTest {

  11.         /**
  12.          * @param args
  13.          */
  14.         public static void main(String[] args) {
  15.                 // TODO Auto-generated method stub
  16.        try {
  17.                 print();
  18.         } catch (IOException e) {
  19.                 // TODO Auto-generated catch block
  20.                 e.printStackTrace();
  21.         }
  22.         }
  23.        
  24.         public static void print() throws IOException
  25.         {
  26.                 BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
  27.                 String str = br.readLine();
  28.                 int parma = 0;
  29.                 if(str.matches("\\d+"))
  30.                 {
  31.                         parma = Integer.parseInt(str);
  32.                 }
  33.                 List<Integer> list = getFactor(parma);
  34.                 System.out.print(parma +"=");
  35.                 for(int i = 0 ; i< list.size(); i++)
  36.                 {
  37.                         if(i<list.size()-1)
  38.                                 System.out.print(list.get(i)+"*");
  39.                         else
  40.                                 System.out.print(list.get(i));
  41.                 }
  42.         }
  43.        
  44.        
  45.         /**
  46.          * 方法通过获得传入的要分解的合数,并传入用于存放期分解质数的数组
  47.          * @param parma
  48.          * @param factor
  49.          * @return
  50.          */
  51.         public static List<Integer> getFactor(int parma)
  52.         {
  53.                 List<Integer> list = new ArrayList<Integer>();
  54.                 for(int i = 2;i < parma/2;i++)
  55.                 {
  56.                         if(parma%i == 0&& getPrime(i))
  57.                         {
  58.                                 list.add(i);
  59.                         }
  60.                 }
  61.                 return list;
  62.         }
  63.        
  64.         /**
  65.          * 判断一个整形数据是否为质数
  66.          * @param prime
  67.          * @return 是否为质数
  68.          */
  69.         public static boolean getPrime(int prime)
  70.         {
  71.                 boolean flag = false;
  72.                 if(prime == 2)
  73.                         flag = true;
  74.                 if(prime > 2)
  75.                 {
  76.                         int i = 2;
  77.                         for(; i <= (int)Math.sqrt(prime);i++)
  78.                         {
  79.                                 if(prime%i == 0)
  80.                                 {
  81.                                         flag = false;
  82.                                         break;
  83.                                 }
  84.                         }
  85.                         if(i>(int)Math.sqrt(prime))
  86.                         {
  87.                                 flag = true;
  88.                         }
  89.                        
  90.                 }
  91.                
  92.                 return flag;
  93.         }

  94. }
  95. [code]package com.itcase.test;

  96. import java.io.BufferedReader;
  97. import java.io.BufferedWriter;
  98. import java.io.File;
  99. import java.io.FileReader;
  100. import java.io.FileWriter;
  101. import java.io.IOException;


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

  106. * @author Administrator
  107. *
  108. */
  109. public class FileCopy {

  110.         public static void main(String[] args) {
  111.                 // TODO Auto-generated method stub
  112.         String path = "test";//源文件的目录,这是相对本工程的相对路径
  113.         new FileCopy().copyFile(path);
  114.         }
  115.        
  116.         /**
  117.          * 将指定目录下的文件拷贝到与该文件目录相同的地方,
  118.          * 文件名的格式为:数字+名称.java
  119.          * 并将文件名改为:数字+名称+数字.java。
  120.          * @param path
  121.          */
  122.         public void copyFile(String path)
  123.         {
  124.                 File file = new File(path);
  125.                 File[] files = file.listFiles();//获得目录下的文件列表
  126.                 BufferedReader br = null;
  127.                 BufferedWriter bw = null;
  128.                 for(File fl : files)
  129.                 {
  130.                         String fileName =fl.getParent()+File.separator+ this.changName(fl);//拼接文件名
  131.                         try {
  132.                                 br = new BufferedReader(new FileReader(fl));
  133.                                 bw = new BufferedWriter(new FileWriter(new File(fileName)));
  134.                                 String str = null;
  135.                                 while((str = br.readLine())!= null)
  136.                                 {
  137.                                         bw.write(str);//将内容写出
  138.                                         bw.newLine();//创建一个换行
  139.                                 }
  140.                                 bw.close();
  141.                                 br.close();
  142.                         } catch (IOException e) {
  143.                                 // TODO Auto-generated catch block
  144.                                 e.printStackTrace();
  145.                         }
  146.                 }
  147.         }
  148.        
  149.        
  150.         /**
  151.          * 为复制的文件确定名字
  152.          * 利用正则表达式的替代功能来确定文件名称
  153.          * @param file
  154.          * @return
  155.          */
  156.         public String changName(File file)
  157.         {
  158.                 String name = file.getName();//源文件的
  159.                 String rel = "(\\d*)([a-zA-Z]+)\\.java";
  160.                 //利用正则表达式的替代功能来确定文件名称
  161.                 name = name.replaceAll(rel, name.substring(0, name.indexOf("."))+"$$1"+name.substring(name.indexOf(".")));
  162.                 return name;
  163.         }
  164. }
复制代码
[
  1. /code]
复制代码
  1. package com.itcase.test;
  2. /**
  3. * 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
  4. * 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
  5. * (注:存入数组后,数组中的所有元素理论上是无序的,相同的那个素数不一定就等于a[n],而是被存入了数组中的某个角标上)
  6. */
  7. import java.util.ArrayList;
  8. import java.util.List;

  9. public class SearchPrime {

  10.         public static void main(String[] args) {
  11.                 // TODO Auto-generated method stub
  12.         int reslut = new SearchPrime().searchPrime(100);
  13.         System.out.println(reslut);
  14.         }
  15.        
  16.         /**
  17.          * 判断一个整形数据是否为质数
  18.          * @param prime
  19.          * @return 是否为质数
  20.          */
  21.         public boolean isPrime(int prime)
  22.         {
  23.                 boolean flag = false;
  24.                 if(prime == 2)
  25.                         flag = true;
  26.                 if(prime > 2)
  27.                 {
  28.                         int i = 2;
  29.                         for(; i <= (int)Math.sqrt(prime);i++)
  30.                         {
  31.                                 if(prime%i == 0)
  32.                                 {
  33.                                         flag = false;
  34.                                         break;
  35.                                 }
  36.                         }
  37.                         if(i>(int)Math.sqrt(prime))
  38.                         {
  39.                                 flag = true;
  40.                         }
  41.                        
  42.                 }
  43.                
  44.                 return flag;
  45.         }
  46.     /**
  47.      * 将100中的素数加入数组,并在数组的随机位置上添加了一个100以内的随机质数
  48.      * @param parma
  49.      * @return
  50.      */
  51.     public int[] getPrime(int parma)
  52.     {
  53.             List<Integer> list = new ArrayList<Integer>();
  54.             for(int i = 2;i<= parma; i++)
  55.             {
  56.                     if(isPrime(i))
  57.                     {
  58.                             list.add(i);//将为素数的元素加入List集合
  59.                     }
  60.             }
  61.             int[] primes = new int[list.size()+1];
  62.             //random1获得一个List中的一个随机索引
  63.             int random1 =(int)(Math.random()*list.size()+1);
  64.             //random2将list中获得的一个随机的数加入数组中的速记位置;
  65.             int random2 =(int)(Math.random()*list.size()+1);
  66.            
  67.             for(int i = 0; i < list.size()+1; i++)
  68.             {
  69.                     if(i<random2)
  70.                     {
  71.                             primes[i] = list.get(i);//
  72.                     }else
  73.                             if(i==random2)
  74.                                     primes[i] = list.get(random1);
  75.                             else primes[i] = list.get(i-1);
  76.                    
  77.             }          
  78.             return primes;
  79.     }
  80.    
  81.     /**
  82.      * 通过快速排序方法将数组排序,并对数组中存在加入的质数找到
  83.      * @param parma
  84.      * @return 返回那个素数
  85.      */
  86.     public int searchPrime(int parma)
  87.     {
  88.             int result = 0;
  89.         int []primes = this.getPrime(parma);
  90.         this.quickSort(primes, 0, primes.length -1);
  91.         for(int i = 0; i< primes.length; i++)
  92.         {
  93.                 if(primes[i] == primes[i+1])
  94.                 {
  95.                         result = primes[i];
  96.                         break;
  97.                 }
  98.         }
  99.         return result;
  100.     }
  101.    
  102.     /**
  103.      * 实现数组内两个数值交换
  104.      * @param a对应的数组
  105.      * @param i数组的下标
  106.      * @param j数组的下标
  107.      */
  108.     public void change(int a[], int i, int j)
  109.     {
  110.             if(i==j)
  111.             {
  112.                     return;
  113.             }
  114.             int tmp = a[i];//实现交换
  115.             a[i] =a[j];
  116.             a[j] = tmp;
  117.     }
  118.    
  119.     /**
  120.      *
  121.      * @param arr 带排序的数组
  122.      * @param low
  123.      * @param height
  124.      * @return i
  125.      */
  126.     public int partition(int arr[],int low,int height)
  127.     {
  128.               //当前位置为第一个元素所在位置
  129.         int p_pos = low;
  130.         //采用第一个元素为轴
  131.         int pivot = arr[p_pos];
  132.          
  133.         for (int i = low + 1; i <= height; i++) {

  134.             if (arr[i] < pivot) {            
  135.                
  136.                 p_pos++;

  137.                 change(arr, p_pos, i);  

  138.             }

  139.         }

  140.         change(arr, low, p_pos);

  141.         return p_pos;

  142.     }
  143.     /**
  144.      * 实现快速排序
  145.      * @param arr
  146.      * @param low
  147.      * @param high
  148.      */
  149.     public void quickSort(int arr[], int low, int high)
  150.     {
  151.             if(low < high)
  152.             {
  153.                     int pivot = partition(arr, low, high);
  154.                     //System.out.println(pivot);
  155.                     quickSort(arr, low, pivot-1);
  156.                     quickSort(arr, pivot+1, high);
  157.             }
  158.     }
  159. }
复制代码

点评

第三题出现无效参数异常  发表于 2013-7-14 01:23

评分

参与人数 1技术分 +3 收起 理由
神之梦 + 3 第一题错误

查看全部评分

回复 使用道具 举报

请说明第三题那个参数出现无效异常
还有第一题,我运行这很正常啊
回复 使用道具 举报

昨天第一题没搞好测试,真的太马虎啦,下面是我修改了一下的代码
  1. package com.itcase.test;

  2. /**
  3. * 1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
  4. */
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.util.ArrayList;
  9. import java.util.List;

  10. public class PrimeTest {

  11.         /**
  12.          * @param args
  13.          */
  14.         public static void main(String[] args) {
  15.                 // TODO Auto-generated method stub
  16.        try {
  17.                 print();
  18.         } catch (IOException e) {
  19.                 // TODO Auto-generated catch block
  20.                 e.printStackTrace();
  21.         }
  22.         }
  23.        
  24.         public static void print() throws IOException
  25.         {
  26.                 BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
  27.                 String str = br.readLine();
  28.                 int parma = 0;
  29.                 if(str.matches("\\d+"))
  30.                 {
  31.                         parma = Integer.parseInt(str);
  32.                 }
  33.                 List<Integer> list = getFactor(parma);
  34.                 System.out.print(parma +"=");
  35.                 for(int i = 0 ; i< list.size(); i++)
  36.                 {
  37.                         if(i<list.size()-1)
  38.                                 System.out.print(list.get(i)+"*");
  39.                         else
  40.                                 System.out.print(list.get(i));
  41.                 }
  42.         }
  43.        
  44.        
  45.         /**
  46.          * 方法通过获得传入的要分解的合数,并传入用于存放期分解质数的数组
  47.          * @param parma
  48.          * @param factor
  49.          * @return
  50.          */
  51.         public static List<Integer> getFactor(int parma)
  52.         {
  53.                 List<Integer> list = new ArrayList<Integer>();
  54.                 int i = 2;
  55.                 while(i<= parma )
  56.                 {
  57.                         if(parma %i == 0 && isPrime(i))
  58.                         {
  59.                                 list.add(i);
  60.                                 parma = parma/i;
  61.                                 i=2;
  62.                         }
  63.                         else
  64.                              i++;
  65.                 }
  66.                 return list;
  67.         }
  68.        
  69.         /**
  70.          * 判断一个整形数据是否为质数
  71.          * @param prime
  72.          * @return 是否为质数
  73.          */
  74.         public static boolean isPrime(int prime)
  75.         {
  76.                 boolean flag = false;
  77.                 if(prime == 2)
  78.                         flag = true;
  79.                 if(prime > 2)
  80.                 {
  81.                         int i = 2;
  82.                         for(; i <= (int)Math.sqrt(prime);i++)
  83.                         {
  84.                                 if(prime%i == 0)
  85.                                 {
  86.                                         flag = false;
  87.                                         break;
  88.                                 }
  89.                         }
  90.                         if(i>(int)Math.sqrt(prime))
  91.                         {
  92.                                 flag = true;
  93.                         }
  94.                        
  95.                 }
  96.                
  97.                 return flag;
  98.         }

  99. }
复制代码
回复 使用道具 举报
支持了。。。
回复 使用道具 举报
1234567
您需要登录后才可以回帖 登录 | 加入黑马