学习笔记(6) 使用数组、文件和图表

一、数组
1.数组的概念

数组,顾名思义就是一组数据。数组对于每一门编程语言来说都是重要的数据结构之一,当然不同的语言对数组的实现以及处理也不尽相同。Java语言中提供的数组用来存储固定大小的同类型元素。
在Java中,数组也可以认为是一种数据类型,它本身是一种引用类型。Java的数组可以存储基本类型的数据,也可以存储引用类型的数据。比如存储int类型:

//首先声明一个int[]类型的变量x,然后创建一个长度为100的数组。
int[]  x;
x=new int[100];

2.一维数组
一维数组就是一组具有相同类型的数据的集合,一维数组中的元素是按顺序存放的。
2.1 数组的声明
要使用Java中的数组,必须先声明数组,再为数组分配内存空间。一维数组的声明有两种方式,语法格式如下:

数据类型 数组名[];
数据类型[]  数组名;
  • 数据类型:指明数组中元素的类型
  • 数组名:一个合法的java标识符
  • 中括号‘[]’:表示数组的维数,一对中括号表示一维数组。

java语言使用new操作符来创建数组,语法格式如下:

arrayRefvar = new dataType[arraySize];

声明数组变量和创建数组可以用一条语句来完成,语法格式如下

dataType[]  arrayRefvar = new dataType[arraySize];

另外,用户还可以使用以下的方式创建数组,语法格式如下

dataType[]  arrayRefvar = {value0,value1,value2,...,valuek};

数组的元素是通过索引访问的,数组索引从零开始,索引为0到arrayRefVar.length-1。
例:声明数组应用实例

public class Test{
	public static void main(String[] args){
		int [] a1;          //声明数组变量
		a1 = new int [3]; //创建数组对象
		System.out.println("a1[0]="+a1[0]);   //访问数组中的第一个元素
		System.out.println("a1[1]="+a1[1]);   //访问数组中的第二个元素
		System.out.println("a1[2]="+a1[2]);   //访问数组中的第三个元素
		System.out.println("数组的长度是"+a1.length);  //数组的长度
	}
}

运行结果如图
在这里插入图片描述
本例中,访问了数组的元素 但是没有给数组赋值,所有打印的是默认值0,数组对象有一个属性length,可以用来获取数组元素的个数,称为数组长度。
例:数组的声明,默认值和赋值应用实例

public class Test{
	public static void main(String[] args){
		int [] a1  = new int [3]; //创建数组对象
		a1[0]=1;       //为第一个元素赋值为1
		a1[2]=3;       //为第三个元素赋值为3
		System.out.println("a1[0]="+a1[0]);   //访问数组中的第一个元素
		System.out.println("a1[1]="+a1[1]);   //访问数组中的第二个元素
		System.out.println("a1[2]="+a1[2]);   //访问数组中的第三个元素
   }
}

运行结果如图所示
在这里插入图片描述
2.2 初始化数组
在Java中,初始化数组有静态动态两种方式。
在定义数组时指定数组的长度,并由系统自动为元素赋初值,称为动态初始化。
例: 数组动态初始化应用实例

	public class Test{
	public static void main(String[] args){
		int size = 10;
		int[] mylist = new int[size];
		mylist[0] = 5;
		mylist[1] = 4;
		mylist[2] = 3;
		mylist[3] = 2;
		mylist[4] = 18;
		mylist[5] = 25;
		mylist[6] = 34;
		mylist[7] = 68;
		mylist[8] = 102;
		mylist[9] = 1000;
		//计算所有元素的总和
		int result=0;
		for(int i=0;i<size;i++) {
			result+=mylist[i];
		}
		System.out.println("总和为:"+result);
	
   }
}

运行结果如下
在这里插入图片描述
数组的初始化还有一种静态方式,就是在定义数组的同时,就为每个数组的元素赋值。数组的静态初始化有两种方法,格式如下:

1. 类型[]  数组名 = new 类型[] {元素,元素,...};
2. 类型[]  数组名 = {元素,元素,元素,...}

例:数组静态初始化应用实例

public class Test{
	public static void main(String[] args){
		int [] a1 = {1,2,3,4};
		String[] a2=new String[] {"java","PHP","Python"};
		//访问数组的元素
		System.out.println("a1[0]="+a1[0]);
		System.out.println("a1[1]="+a1[1]);
		System.out.println("a1[2]="+a1[2]);
		System.out.println("a1[3]="+a1[3]);
		System.out.println("a2[0]="+a2[0]);
		System.out.println("a2[1]="+a2[1]);
		System.out.println("a2[2]="+a2[2]);
	
   }
}

运行结果如图
在这里插入图片描述
3. 多维数组
多维数组的声明与一维数组类似,一维数组要使用一个大括号,二维数组使用两个大括号,以此类推,常用的多维数组是二维数组
3.1 数组的声明
多维数组可以看出数组的数组。二维数组就是一个特殊的一维数组,其每个元素都是一个一维数组,如

String str[] [] =new String[3][4]

多维数组的初始化(以二维数组为例)有两种
(1)直接为每一维分配空间,格式如下:

type arrayName = new type[arraylength1] [arraylenght2];

type可以为基本数据类型和复合数据类型,arraylength1和arraylength2必须为正整数,arraylength1为行数,arraylength2为列数。例如
int a [] [] =new int[2][3];
二维数组a可以看成一个两行三列的数组。
(2)从最高维开始,分别为每一维分配空间。例如:

public class Test{
	public static void main(String[] args){
		String s[] [] =new String[2][3];
		s[0] = new String[2];
		s[1] =new String[3];
		s[0][0] =new String("Good");
		s[0][1] =new String("Luck");
		s[1][0] =new String("to");
		s[1][1] =new String("you");
		s[1][2] =new String("!");
		for(int i=0;i<s.length;i++) {   //使用for循环遍历多维数组
			for(int y=0;y<s[i].length;y++) {
				System.out.println(s[i][y]);
			}
		}
   }
}

二、文件流
文件流是用来对文件进行读写的流类,主要包括FileWriter类和FileReader类
1 FileReader类
FileReader类创建了一个可以读取文件内容的Reader类。它最常用的构造方法如下

FileReader(String filePath)
FileReader(File fileObj)

这两个方法都能引发一个FileNotFoundException异常。在这里filePath是一个文件完整的路径,fileObj是描述该文件的File对象。
2.FileWriter类
FileWriter创建一个可以写文件的Writer类。它最常用的构造方法如下:

FileWriter(String filePath)
FileWriter(String filePath,boolean append)
FileWriter(File fileObj)

它们可以引发IOException或者SecurityException异常。在这里filePath是文件的绝对路径,fileObj是描述该文件的File对象。如果append为true,输出是附加到文件尾的。FileWriter类的创建不依赖于文件存在与否。在创建文件之前,FileWriter将在创建对象时打开它 来作为输出。如果试图打开一个只读文件,将引发一个IOException异常。
例:利用文件流实现文件的复制功能

import java.util.Scanner;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
public class Test{
	public static void main(String[] args)throws IOException{
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入原文件名和目的文件名,中间用空格隔开");
		
		String s=scanner.next();   //读取源文件名
		String d=scanner.next();   //读取目的文件名
		
		File file1 = new File(s);  //创建源文件对象
		File file2 = new File(d);  //创建目的文件对象
		
		if(!file1.exists()) {
			System.out.println("被复制的文件不存在");
			System.exit(1);
		}
		InputStream input = new FileInputStream(file1);  //创建源文件流
		OutputStream output = new FileOutputStream(file2);//创建目的文件流
		
		if(input !=null && output!=null) {
			int temp=0;
			while((temp=input.read())!=(-1)) {
				output.write(temp);
			}
		}
		input.close();
		output.close();
		System.out.println("复制文件成功");
   }
}

运行结果如图:
在这里插入图片描述

三、JFreeChart图表
JFreeChart主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
1.绘制
需要的jar包:jfreechart-1.0.13.jar jcommon-1.0.16.jar
官网:http://www.jfree.org/index.html
柱状图(CategoryPlot): CategoryPlot plot=chart.getCategoryPlot();

//获取图表区域对象 CategoryAxis domainAxis=plot.getDomainAxis();

//水平底部列表 domainAxis.setLabelFont(new Font(“黑体”,Font.BOLD,14));

//水平底部标题 domainAxis.setTickLabelFont(new Font(“宋体”,Font.BOLD,12));

//垂直标题 ValueAxis rangeAxis=plot.getRangeAxis();

//获取柱状 rangeAxis.setLabelFont(new Font(“黑体”,Font.BOLD,15)); chart.getLegend().setItemFont(new Font(“黑体”, Font.BOLD, 15));

饼图(PiePlot): JFreeChart chart = ChartFactory.createPieChart3D(“IT行业职业分布图”, dataset, true, false, false);

chart.getTitle().setFont(new Font(“黑体”,Font.BOLD,20));//设置标题字体

PiePlot piePlot= (PiePlot) chart.getPlot();//获取图表区域对象

piePlot.setLabelFont(new Font(“黑体”,Font.BOLD,10)); chart.getLegend().setItemFont(new Font(“黑体”,Font.BOLD,10));
例:折线图应用实例

package com.test;

import java.awt.Color;
import java.awt.Font;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class Test {
	public static void main(String[] args) {
		StandardChartTheme mChartTheme = new StandardChartTheme("CN");
		mChartTheme.setLargeFont(new Font("黑体", Font.BOLD, 20));
		mChartTheme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 15));
		mChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15));
		ChartFactory.setChartTheme(mChartTheme);		
		CategoryDataset mDataset = GetDataset();
		JFreeChart mChart = ChartFactory.createLineChart(
				"折线图",
				"年份",
				"数量",
				mDataset,
				PlotOrientation.VERTICAL,
				true, 
				true, 
				false);
		CategoryPlot mPlot = (CategoryPlot)mChart.getPlot();
		mPlot.setBackgroundPaint(Color.LIGHT_GRAY);
		mPlot.setRangeGridlinePaint(Color.BLUE);//背景底部横虚线
		mPlot.setOutlinePaint(Color.RED);//边界线
		
		ChartFrame mChartFrame = new ChartFrame("折线图", mChart);
		mChartFrame.pack();
		mChartFrame.setVisible(true);
	}
	public static CategoryDataset GetDataset()
	{
		DefaultCategoryDataset mDataset = new DefaultCategoryDataset();
		mDataset.addValue(1, "First", "2013");
		mDataset.addValue(3, "First", "2014");
		mDataset.addValue(2, "First", "2015");
		mDataset.addValue(6, "First", "2016");
		mDataset.addValue(5, "First", "2017");
		mDataset.addValue(12, "First", "2018");
		mDataset.addValue(14, "Second", "2013");
		mDataset.addValue(13, "Second", "2014");
		mDataset.addValue(12, "Second", "2015");
		mDataset.addValue(9, "Second", "2016");
		mDataset.addValue(5, "Second", "2017");
		mDataset.addValue(7, "Second", "2018");
		return mDataset;
	}
}

运行结果如图所示:
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值