支持多平台和纯面向对象的JAVA语言是一门更接近于自然语言的编程语言,依据耿祥义编著的《Java大学实用教程(第三版)》,学习了前三章之后,虽然还没有涉及到JAVA最精华的面向对象部分,但是在此就用两段小代码来总结一下当下的学习情况吧!
(一)使用while循环和二分查找去判断一个整数是否在一个已经排好序的int型数字中。
记事本编辑代码如下:
import java.util.*; //由于要用到基本的输入输出函数,所以首先就把把.util包加载进来 public class Example3_8{ public static void main(String[] args){ //程序的入口main()函数,一定要按照此规则来写,且不能省略该处 参数的传递,原因与函数的重载有关 int n,start,end,middle; int a[]={-2,1,4,5,8,12,17,23,45,56,90,100}; //一种引用数据类型的定义方式 start=0; end=a.length; //注意:整形数组可以直接借助于.length直接可以返回数组的长度,而对于字符型的数组 是要用.length()函数来进行返回的 middle=(start+end)/2; int count=0; Scanner reader= new Scanner(System.in); //JDK1.5之后新增的类,提供了方便的键盘输入功能函数, 上下三句一般要进行搭配使用 System.out.println("请输入一个整数:"); n=reader.nextInt(); while(n!=a[middle]) { if(n>a[middle]){ start=middle; } else if(n<a[middle]){ end=middle; } middle=(start+end)/2; count++; if(count>a.length/2){ break; } } if(count>a.length/2) System.out.println(n+"不在数组中"); else System.out.println(n+"是数组中的第"+middle+"个元素"); //输出串值并自动加回车换行,“+”是 链接符 } }
由于代码量不是很够,所以还没有放手去使用强大的Java集成开发环境,所以.txt编辑的可能有点丑,而且还要借助于Windows下的DOS进行编译和运行,敬请见谅。但是,特别要注意的是由于代码中存在public的类,所以,一定要把源文件的名称存成相应的类名,且扩展名为:.java,防止出错。
(二)做个小题练练手
NEFU 955 :五人帮:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=955
题目分析:在一个数组中,该位置的上下左右还有自己本身一个五人帮,编程输出该五人帮的最大值。
特别注意,此题考察对数组的使用,由于会涉及到到旁边的元素,所以我们要从a[1][1]开始使用,虽然是用JAVA实现,在申请好数组之后,系统会自动根据该数组的类型来对其进行初始化,但是,此题目有多组数据,一次初始化并不能对下一次的输入值进行控制,所以每一次都要进行对数组的初始化,我用了一个二重循环实现。
其次,在OJ上提交题目时要注意,程序的入口类定义一定要如下:否则会出现编译错误(Compile Error)
public class Main{ public static void main(String [] args){ } }最终代码如下:
import java.util.*; public class Main{ public static void main(String[] args){ int m,n,sum; int max; int[][]data=new int [20][20]; //二维数组的定义 Scanner reader=new Scanner(System.in); //此处操作只能进行一次 while(reader.hasNext()&&reader.hasNext()){ //多组数据,一次获取输入两个值 max=-99; //max的初始化,每次都要进行一次 m=reader.nextInt(); n=reader.nextInt(); for(int i=0;i<=15;i++){ //数组初始化 for(int j=0;j<=15;j++){ data[i][j]=0; } } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ data[i][j]=reader.nextInt(); } } //for(int i=0;i<=m+1;i++){ //for(int j=0;j<=n+1;j++){ //System.out.printf("%d ",data[i][j]); //} //System.out.printf("\n"); //} sum=0; for(int i=1;i<=m;i++){ //计算五人帮,顺便把最大的五人帮求解出来 for(int j=1;j<=n;j++){ sum=data[i][j]+data[i-1][j]+data[i][j-1]+data[i][j+1]+data[i+1][j]; if(sum>max){ max=sum; } } } System.out.println(max); } } }OJ上一定能过的代码,要想在DOS中运行,必须更改类名。
现在只学了那么多,之后面向对象的经典部分,敬请期待。