zoukankan      html  css  js  c++  java
  • java02实验:方法

    一:素数输出

    1.实验要求:

    (1)编写判断该数是否为素数的方法,并在主方法中对其进行调用。

    (2)注意编程规范:程序开头部分的目的,作者以及日期;必要的空格与缩进,适当的注释等;

    (3)实验报告中要求包括程序设计思想、程序流程图、源代码、运行结果截图、编译错误分析等内容。 

    2.实验内容

    (1)计算并输出3~100之间的素数。

    (2)编程满足下列要求:

     1)按照每行5个输出;

     2)输出任意两个整数之间的所有素数;

     3)输入两个整数,输出这两个整数之间的最大的10个和最小的10个素数

    3.程序设计思想:

    首先要了解素数的定义在大于1的自然数中,不存在除了1和它本身的因数。了解定义后,就知道要用循环语句依次求余来判断。我采用在类外定义一个只有一个参数的函数,来实现判断这个参数是否为素数。任意两个整数之间的素数输出,我用for语句将他们分别定义为初始条件和结束条件,然后又定义了一个计数器,实现每行五个输出,最后的最大和最小素数,只用了一个动态数组Arraylist,正反输出就解决了

    4.源代码:

      1 package java课堂;
      2 
      3 /*20173442 信1705-3 田昕可*/
      4 
      5 import java.util.*;
      6 
      7 public class Zuoye2 {
      8 
      9  
     10 
     11  
     12 
     13 public static void main(String[] args) {
     14 
     15           // TODO 自动生成的方法存根
     16 
     17           int i;
     18 
     19 int n;
     20 
     21 int m;
     22 
     23 int c=0;
     24 
     25 ArrayList list=new ArrayList();//定义动态数组
     26 
     27 Scanner scan=new Scanner(System.in);
     28 
     29 System.out.println("请输入两个数,计算他们中间的素数");
     30 
     31 n=scan.nextInt();
     32 
     33 m=scan.nextInt();//输入两个数
     34 
     35 for(i=n;i<=m;i++)
     36 
     37 {
     38 
     39 if(func(i)==1)
     40 
     41   {
     42 
     43 System.out.print(i+" ");
     44 
     45 list.add(i);
     46 
     47 c++;
     48 
     49   }
     50 
     51 else
     52 
     53 continue;
     54 
     55 if(c%5==0)
     56 
     57 {
     58 
     59                   System.out.print("
    ");
     60 
     61 }
     62 
     63  
     64 
     65 }
     66 
     67 System.out.print("
    ");//换行,进行下一个操作
     68 
     69 if(list.size()<10)
     70 
     71 System.out.print("不足十个数");
     72 
     73 else
     74 
     75 {
     76 
     77           System.out.print("最小的十个素数 :");
     78 
     79      for(i=0;i<10;i++)
     80 
     81 System.out.print(list.get(i)+" ");//输出最小的十个素
     82 
     83     System.out.print("
    ");//换行,进行下一个操作
     84 
     85     System.out.print("最大的十个素数 :");
     86 
     87     for(i=list.size()-1;i>=list.size()-10;i--)
     88 
     89 System.out.print(list.get(i)+" ");//输出最大的十个素数
     90 
     91 }
     92 
     93  
     94 
     95 }
     96 
     97  
     98 
     99 public static int func(int n)//判断是否为素数的函数
    100 
    101 {
    102 
    103           int i;
    104 
    105           boolean bl=true;
    106 
    107           for(i=2;i<n;i++)
    108 
    109           {
    110 
    111                   if(n%i==0)
    112 
    113                            bl=false;
    114 
    115           }
    116 
    117           if(bl==true)
    118 
    119                   return 1;
    120 
    121           else
    122 
    123                   return 0;
    124 
    125 }
    126 
    127  
    128 
    129 }

    反思思考:

    第一次调试时,发现不能得到正常结果,最后返回来看代码发现,在输出最大的十个素数,进行动态数组从后往前操作时,初始值越界,没有考虑到数组下标的特殊性,通过修改解决了问题。

    二:递归方法

    1、  实验要求:

    (1)必须用递归函数实现上述问题;

    (2)注意编程规范:程序开头部分的目的,作者以及日期;必要的空格与缩进,适当的注释等;

    (3)实验报告中要求包括程序设计思想、程序流程图、源代码、运行结果截图、编译错误分析等内容。

    2、    实验内容

    (1)    使用递归方式判断某个字串是否是回文( palindrome );

    回文”是指正着读、反着读都一样的句子。比如“我是谁是我”

    使用递归算法检测回文的算法描述如下:

    A single or zero-character string is a palindrome.

    Any other string is a palindrome if the first and last characters are the same, and the string that remains, excepting those characters, is a palindrome.

     

    3.程序设计思想:

    判断字符串是否回文,第一反应是运用数组首位依次比较判断,但题目要求必须使用递归方法,那就放到类外函数体中递归使用。构造一个函数,参数为字符串首地址,初始值start,字符串的长度size。start为初始下标0,如果start>=size,说明只剩下了一个字符,一定回文,返回true,递归结束。如果满足,就依次首位判断,只要有一组不相等,就返回false。

    4.源代码

     1 package java课堂;
     2 
     3 import java.util.*;
     4 
     5 public class Huiwen {
     6 
     7  
     8 
     9 public static boolean func(String str,int start,int size)
    10 
    11 {
    12 
    13           if(start>=size-1)
    14 
    15                   return true;
    16 
    17           if(str.toCharArray()[start]!=str.toCharArray()[size-1])
    18 
    19                   return false;
    20 
    21           return func(str,start+1,size-1);
    22 
    23 }
    24 
    25 public static void main(String[] args) {
    26 
    27           // TODO 自动生成的方法存根
    28 
    29 Scanner scan=new Scanner(System.in);
    30 
    31 String s;
    32 
    33 System.out.println("请输入字符串 :");
    34 
    35 s=scan.nextLine();
    36 
    37 if(func(s,0,s.length()))
    38 
    39 System.out.println("回文");
    40 
    41 else
    42 
    43 System.out.println("不回文");
    44 
    45 }
    46 
    47  
    48 
    49 }

    5.运行截图

     

     

     

     

    反思思考:

    开始时不知道如何将字符串与下标相结合起来,后来问同学知道了toCharArray()函数,将字符串转化为字符数组,方便操作和比较

    三: 统计分析

    1.实验要求:

    实验报告中要求包括程序设计思想、程序流程图、源代码、运行结果截图、编译错误分析等内容。

    2、实验内容:

    (1)    用户需求:英语的26 个字母的频率在一本小说中是如何分布的?某类型文章中常出现的单词是什么?某作家最常用的词汇是什么?《哈利波特》 中最常用的短语是什么,等等。

    (2)    要求:输出单个文件中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。

     

    3.程序设计思想:

    首先一定要创两个文件,一个为读入文件,一个为写入文件,并记录其路径。然后编写程序,从读入文件中读取数据,并存到字符串当中。后通过上网查询了解到字符串函数中有一项分割操作,将字符串又分割成一个一个的单词。计数的问题,我采用了创立动态数组,与字符串数组一一比较,如果存在一样的,跳过,不一样的就存入。最终通过循环,加入计数,就实现了统计。

    4.源代码:

      1 package java课堂;
      2 
      3  
      4 
      5 import java.io.*;
      6 
      7 import java.util.*;
      8 
      9 import java.lang.*;
     10 
     11  
     12 
     13 public class Zuoye1 {
     14 
     15  
     16 
     17      public static void main(String[] args) {
     18 
     19      try {
     20 
     21      int i=0;
     22 
     23      int j;
     24 
     25      //从文件地址中读取内容到程序中
     26 
     27      //1、建立连接
     28 
     29      File file=new File("F:/java开发/wenben.txt");
     30 
     31      BufferedReader br=new BufferedReader(new FileReader(file));
     32 
     33     
     34 
     35      FileOutputStream out=new FileOutputStream("F:/java开发/jieguo.txt");
     36 
     37     PrintStream p=new PrintStream(out);//文件写入流
     38 
     39    
     40 
     41      String s;
     42 
     43      char []c=new char[200];
     44 
     45      s=br.readLine();//创建字符串,将文本文件中的文字存进去
     46 
     47     System.out.println(s);
     48 
     49     String []s1=s.split(" |,");//s1储存每一个单词
     50 
     51  
     52 
     53     ArrayList list = new ArrayList();//动态数组
     54 
     55     for(i=0;i<s1.length;i++)
     56 
     57  {
     58 
     59      if(!list.contains(s1[i])&&s1[i]!=" ")
     60 
     61             list.add(s1[i]);
     62 
     63  }//动态数组存储不重复的单词
     64 
     65     for(i=0;i<list.size();i++)
     66 
     67   {
     68 
     69      int count=0;
     70 
     71      for(j=0;j<s1.length;j++)
     72 
     73      {
     74 
     75      if(list.get(i).equals(s1[j]))
     76 
     77             count++;
     78 
     79      }
     80 
     81      //System.out.println(list.get(i)+" "+count);
     82 
     83 p.println(list.get(i)+" "+count);
     84 
     85   }//计数
     86 
     87     
     88 
     89     br.close();
     90 
     91             } catch (FileNotFoundException e) {
     92 
     93                    //系统强制解决的问题:文件没有找到
     94 
     95                    e.printStackTrace();
     96 
     97             } catch (IOException e) {
     98 
     99                    //文件读写异常
    100 
    101                    e.printStackTrace();
    102 
    103             }
    104 
    105            
    106 
    107      }
    108 
    109  
    110 
    111 }

    反思思考:

    对文件操作这块还是有很大的问题,在读入和写入的过程中耗费了太多的时间,还是基础功夫不够扎实。

     

  • 相关阅读:
    洛谷 P3128 [ USACO15DEC ] 最大流Max Flow —— 树上差分
    洛谷 P3953 [ NOIP 2017 ] 逛公园 —— 最短路DP
    bzoj 3231 [ Sdoi 2008 ] 递归数列 —— 矩阵乘法
    bzoj 1024 [ SCOI 2009 ] 生日快乐 —— 递归
    hdu 5823 color II —— 子集DP
    bzoj 1093 [ ZJOI 2007 ] 最大半连通子图 —— 拓扑+DP
    洛谷 P3959 NOIP2017 宝藏 —— 状压搜索
    最短路(模板
    线段树 扫描线
    Dijkstra算法
  • 原文地址:https://www.cnblogs.com/Aduorisk/p/9788443.html
Copyright © 2011-2022 走看看