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 }

    反思思考:

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

     

  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/Aduorisk/p/9788443.html
Copyright © 2011-2022 走看看