java源代码分析 实在是不太会,求高手教教我。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java源代码分析 实在是不太会,求高手教教我。相关的知识,希望对你有一定的参考价值。

Java源代码分析程序
类型:验证型、探索型
目的:初步掌握运用面向对象方法编写应用程序,掌握类、对象、封装等;了解并应用Java语言的字符串处理、文本文件的读写
内容:
1.背景描述:
(1) Java语言共有50个关键字(自行查找相关文档)。
(2) Java源程序是以“.java”为扩展名的文本文件。
(3) 可以考虑在Java源程序中的行共有3种:
<1> 代码行,可运行的Java源代码;
<2> 注释行,3种注释均可;
<3> 空行,既无代码,也无注释;
(4) 行的特殊情况:
<1> 如下情况,可以认为是代码行为1,注释行为0或代码行和注释行均为1。
int number; //number表示人数
<2> 如下情况,可以认为是代码行为1,注释行为1或代码行为1,注释行为2。
int number; /* number为整型
表示人数*/
<3> 假设被分析程序源码无其他特殊情况,如:
int /*人数*/ number;

2. 项目名和类名为JavaCodeAnalyzer,主类名等其他类名自行定义。

3. 实现功能:
(1) JavaCodeAnalyzer类以一个Java源程序文件名和一个存储结果的文本文件名创建一个对象。如果文件不存在,或对应的扩展名不是“.java”和“.txt”,应提示文件错误;
(2) 对输入的源程序文件进行分析其中的:代码行数、注释行数和空行数。说明:行是指以回车结束的。
(3) 统计并按从多到少输出出现次数最多的5个关键字及其出现次数。
(4) 统计分析的结果输出到存储结果的文本文件中,输出内容如下:

分析XXXXX.java源程序的结果:
代码行数:xxx,占xx.xx%
注释行数:xxx,占xx.xx%
空白行数:xxx,占xx.xx%
源程序总行数:xxxx

出现最多的5个关键字是:
关键字1:xx次
关键字2:xx次
关键字3:xx次
关键字4:xx次
关键字5:xx次

分析时间:年-月-日,时-分-秒

package test2;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class JavaCodeAnalyzer 
    public static void analyze(File file) throws IOException
        //FileOutputStream fos = new FileOutputStream("F;"+File.separator+"result.txt");
        if(!(file.getName().endsWith(".txt")||file.getName().endsWith(".java")))
            System.out.println("输入的分析文件格式不对!");
        
        InputStream is= new FileInputStream(file);
        BufferedReader br= new BufferedReader(new InputStreamReader(is));
        String temp;
        int count=0;
        int countSpace=0;
        int countCode=0;
        int countDesc=0;
        Map<String, Integer> map = getKeyWords();
        while((temp=br.readLine())!=null)
            countKeys(temp, map);
            count++;
            if(temp.trim().equals(""))
                countSpace++;
            else if(temp.trim().startsWith("/*")||temp.trim().startsWith("//"))
                countDesc++;
            else
                countCode++;
            
        
        System.out.printf("代码行数:"+countCode+"占总行数的%4.2f\\n",(double)countCode/count);
        System.out.printf("空行数:"+countSpace+"占总行数的%4.2f\\n",(double)countSpace/count);
        System.out.printf("注释行数:"+countDesc+"占总行数的%4.2f\\n",(double)countDesc/count);
        System.out.println("总行数:"+count);
        System.out.println("出现最多的5个关键字是:");
        System.out.println("");
        System.out.println("");
        System.out.println("");
        System.out.println("");
        System.out.println("");
    
    public static void main(String[] args) 
        getKeyWords();
        File file = new File("F://Test.java");
        try 
            analyze(file);
         catch (IOException e) 
            // TODO 自动生成 catch 块
            e.printStackTrace();
        
    
    public static Map<String,Integer> getKeyWords()
        Map<String,Integer> map = new HashMap<String, Integer>();
        String[]keywords = "abstract","assert","boolean","break","byte","case","catch","char","class","continue","default","do","double","else","enum","extends","final","finally","float","for","if","implements","import","instanceof","int","interface","long","native","new","package","private","protected","public","return","    strictfp","short","static","super","    switch","synchronized","this","throw","throws","transient","try","void","volatile","while","goto","const";
        for(String s:keywords)
            map.put(s, 0);
        
        return map;
    
    public static void countKeys(String s,Map<String,Integer> map)
        Set<String> keys = map.keySet();
        for(String ss:keys)
            if(s.indexOf(ss)!=-1)
                map.put(ss, map.get(ss)+1);
            
        
    

上班没啥时间了,还有点没写完,你在想想。

参考技术A Read Write Map Date 参考技术B 要求写的很清楚了,按要求一条条就好。

java方面 是个打印菱形的程序,本人是新手不太理解,求高手注释,详细解释一下,谢了!

public class Var_02
public static void main(String args[])
for(int i=1;i<=7;i+=2)
for(int kong=7;kong>i-1;kong--)
System.out.print(" ");

for(int xing=1;xing<=i;xing++)
System.out.print("* ");

System.out.println();

for(int j=1;j<=5;j+=2)
for(int kong1=1;kong1<j+3;kong1++)
System.out.print(" ");

for(int xing1=5;xing1>=j;xing1--)
System.out.print("* ");

System.out.println();


public class AvoidFile_old
public static void main(String[] args)
//定义一个字符串filepath为一个文件地址的绝对路径
String filepath = "d:/Test/myFile.txt";
/*
* args 这个字符串数组是保存运行main函数时输入的参数,也就是说你编译好了文件是这样运行的java AvoidFile_old xx yy
* 这表示你有两个参数:xx和yy args[0]为xx args[1]为yy
* 如果args的长度大于0,也就是说args数组中有字符串
* 那么就把args数组中的第一个字符串赋值给filepath
* 如果你没有在运行时输入参数,就是简单的运行的话此数组为空if下的语句不执行
* 我认为这段程序有点无厘头,就整个程序而言没有什么意义,可以不考虑,可能整个程序作为模块还有其他作用
* */
if(args.length>0)
filepath = args[0];

//通过将给定路径名字符串转换为抽象路径名aFile(aFile的值为d:/Test/myFile.txt)
//来创建一个新 File 实例。抽象路径名可以理解为输入的d:/Test/myFile.txt
File aFile = new File(filepath);
//FileOutputStream用于写入诸如图像数据之类的原始字节的流
FileOutputStream outputFile = null;
//判断此抽象路径名表示的文件是否是一个标准文件
if (aFile.isFile())
//如果是,创建一个newFile就为此标准文件 此时抽象路径名newFile为d:/Test/myFile.txt
File newFile = aFile;

do
//返回由此抽象路径名表示的文件名称给name。此时得到的name的值为myFile.txt
String name = newFile.getName();
//返回name中"."第一次出现处的索引给period,即myFile.txt根据.索引到的位置period为6(从0开始数)
int period = name.indexOf('.');
if(period == -1)
//period == -1表示给定的文件名不存在(表示你定义的String filepath = "d:/Test/.txt";是这样的或更不全)
/* newFile = new File(newFile.getParent(), extendName(name));表示
* extendName(name)请看程序下段private static String extendName(String name)的方法
* newFile.getParent()得到的是父目录,如果你输入的filepath = "d:/Test/.txt"
* 那么父目录为d:/Test
* 根据 parent(即newFile.getParent())路径名字符串和 child(extendName)路径名字符串创建一个新 File 实例
* 此时创建的实例文件所在路径为d:/Test/extendName(name).txt
* */
newFile = new File(newFile.getParent(), extendName(name));
else
/* 如果文件名不为空的话,
* 根据 parent(newFile.getParent())路径名字符串和 child(extendName) 路径名字符串创建一个新 File 实例
* newFile.getParent()返回newFile父目录的路径名字符串即d:/Test
* extendName()得到的是文件名+点,"d:/Test/myFile.txt"就是"myFile."
* name.substring(0, period))+ name.substring(period))表示
* 返回字符串name=myFile.txt的一个子字符串。该子字符串从指定的0处开始,直到索引最后位 - 1 处的字符第一次创建时
* 为myFile,第二次源目录创建时为myFile000
* 再+name.substring(period)得到一个 .
* */
newFile = new File(newFile.getParent(),
extendName(name.substring(0, period))
+ name.substring(period));

//如果aFile没有重新命名为newFile抽象路径名表示的文件,则循环上面的操作
while(!aFile.renameTo(newFile));


try
//文件已经创建则输出文件名
outputFile = new FileOutputStream(aFile);
System.out.println(aFile.getName()+" output stream created");
catch (FileNotFoundException e)
e.printStackTrace(System.err);

System.exit(0);

//定义方法extendName
private static String extendName(String name)
//把newName定义为动态可变字符串,这样newName可以随时改变,比如下面的newName.delete()方法
StringBuffer newName = new StringBuffer(name);
//获得digits是newName中除点之外的后三位字符串(因为name是文件名加点在上面已经讲了)
//substring方法返回的是 从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符
//所以点. 就不包在digits中,获得的是纯文件名
String digits = newName.substring(newName.length()-3,newName.length());
int number = 0;
try
/*此段程序为整个程序的最精彩之处,把digits转化为整型number,
* 如果在原路径中创建了一个同名时,会自动在文件明后加上000
* 然后通过下面这段程序在000上进行递增即++number
*
* */
number = Integer.parseInt(digits);
++number;
newName.delete(newName.length()-3,newName.length());
catch(NumberFormatException nfe)

//吧number转化为字符串型
digits = String.valueOf(number);
//做声明
assert digits.length() < 4;
/*
*
* */
return newName.append("000").replace(newName.length()-digits.length(),newName.length(), digits).toString();


//注:你必须在c盘中有Test文件夹存在才能运行,如果多次运行改程序那么在你的d:\Test文件夹下有myFile00*.txt文件
参考技术A 大半夜没事做,我给你来解释一下吧,解释完睡觉
第一个包含2个for循环的那个for循环,是打印,是打印正尖朝上的三角型
当i=1时
第一行打印7个空格,再打印一个星,然后打印一个换行,继续下一个for循环,也就是i=3的时候
这时候就是第2行,通过第一个for打印5个空格,再打印3个星
依次循环到第4行,打印一个空格,7个星,这样一个三角型就出来了
下面的包含矿个for循环的for循环是打印倒过来的三角型,组合起来,就是一个菱形了。
当j=1时,第5行打印3个空格,5个星,然后依次循环2次,直到第7行结束,也就是和第一行一样,打印7个空格,一个星
输出结果是这样
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*本回答被提问者采纳

以上是关于java源代码分析 实在是不太会,求高手教教我。的主要内容,如果未能解决你的问题,请参考以下文章

Excel图表横坐标如何自动排序由大到小,不需修改表格内容的情况下,求高手帮忙。

C# 关于DataGridView 添加数据 不用数据库的 出现了一些问题,求高手教教我

360的CSS样式表能发个么 我不太会正在学 求大神指导 最好附带样式表附件 谢谢啦

求高手:matlab在legend框里面的换行指令?

api文档怎么写? api接口我已经写好了但时文档不太会写 还有编写api文档有啥作用 请各位高手大虾指点迷津

电脑高手来教一下 谢谢