java学习总结——通过题来学习Java(Java基础语法)

java学习总结——通过题来学习Java(Java基础语法篇之一)

一.概述

大二痛苦的前十个周后,我终于得到了喘息之机,有时间来回顾一下之前所学到的东西,总结一下之前的所得,尝试获取一下新的东西,同时也可能对大家有所帮助。我决定从总结我们做的每一道题来入手,深入的分析它们并且尝试进行改进,从而达到复习效果,同时希望对和我一样的刚入门的小白也有帮助。

二.题目集分析

1.是否偶数 (10 分)

本题要求实现一个函数,判盘输入的整数是否是偶数,如果是偶数,返回true,否则返回false。

函数接口定义:

public static boolean isOdd(int data)

说明:其中 data 是用户传入的参数。 data 的值不超过int的范围。函数须返回 true 或者 false

裁判测试程序样例:

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int data=in.nextInt();
		System.out.println(isOdd(data));
	}
	
	
	/* 请在这里给出isOdd(i)函数 */
	
	
}



输入样例:

8

输出样例:

true

分析:Java中充满了各种方法,我们所熟知的主函数在public类中,就叫做主方法,这里就是一个最基础的操作,即自己写一个可以判断奇偶数的方法,方法的接口为public static boolean isOdd(int data),这里我们可以看到这个方法是一个public类型的方法,也就是说这个方法是公共的,公共方法一般情况下认为可以跨类使用,而并非仅有此类可以使用,static则将这个方法定义为一个静态方法,静态方法和其他方法不同的是静态方法会事先加载到内存中去,这里的意思是指动态方法会随着实现它的类的对象的出现而可以使用,举个例子,当Scanner类实现一个Scanner对象后,才能使用各种next,nextInt方法,而static类型的方法是不用这样的,他们实际上不再受类的控制,而可以随时独立的使用,这样一来,我们也可以称他们为函数,主函数就是一个静态方法,我个人认为它仍然是一个方法,可能因人而异。boolean代表它的返回类型,boolean可以看到bool,即布尔型,在Java中布尔型有true和false两个值,即真和假,很容易看出。

实现代码:

public static boolean isOdd(int data){//函数接口,并传入参数
		if(data%2==0)//如果为偶数,返回true
			return true;
		else//否则返回false
			return false;
	}

总结:这个题目还未涉及一些“更Java”的东西,但是一些不同已经体现出来了,比如函数的声明中,出现了一些修饰符“public”,“static”,“boolean”,这些修饰符共同定义了这个函数的类型,总体上,他们的优先级为“方法是否公共,是否静态方法,返回值类型”,关于是否公共,我们通常有三种方式来描述public,不加,private,public代表它是一个公共方法,不加默认是公共方法,加private是私有方法,这个方法只能在这个类里使用,同时不能被继承。而是否静态这个修饰符通常是不写,static,不写的话为动态,写static则是静态方法,至于返回值类型则有很多了,而且我们也比较熟悉。日后会进行更加详细的总结。而我们发现Java中的一些布尔运算式,条件判断,返回和C语言差不多,记住即可。

 

 

2.人口统计 (10 分)

本题运行时要求键盘输入10个人员的信息(每一个人信息包括:姓名,性别,年龄,民族),要求同学实现一个函数,统计民族是“汉族”的人数。

函数接口定义:

public static int numofHan(String data[])

其中 data[] 是传入的参数。 data[]中的每一个元素都是一个完整的人员信息字符串,该字符串由“姓名,性别,年龄,民族”,各项之间用英文半角的逗号分隔。函数须返回 值是汉族的人数。

裁判测试程序样例:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		final int HUMANNUM=10;
		String persons[]=new String[HUMANNUM];
		Scanner in=new Scanner(System.in);
		for(int i=0;i

输入样例:

Tom_1,男,19,汉族
Tom_2,女,18,汉族
Tom_3,男,20,满族
Tom_4,男,18,汉族
Tom_5,男,19,汉族人
Tom_6,女,17,汉族
Tom_7,男,19,蒙古族
汉族朋友_1,男,18,汉族
Tom_8,male,19,老外
Tom_9,female,20,汉族

输出样例:

7

分析:这个题乍一看复杂了起来,涉及键盘输入,字符串处理,对于字符串处理,我们是不需要添加库文件的,但是对于输入文字就不是这样了,同时和C语言也有不小的差别,对于这里我也仍有些不清楚的地方,比如我们可以动态调用print方法,也可以静态调用,而对于输入我们可以用Scanner包,也可以使用StringBuilder包,二者有着不同的操作方法,效率也不是一样的,这些需要进行更详细的分析。

代码实现:

public static int numofHan(String data[])//显然传入了一个字符数组的参数
	{
		int i,han = 0;//设置字符指针和计数器
		for(i=0;i0)//indexOf方法可以获取到一个字符串中指定字符的位置
				han++;
		}
		return han;
	}
//关于indexOf方法的详细解释,indeOf(查找字符,开始查找位置),如果不添加查找位置,会默认从头开始查找,因为字符串其他位置可能存在“汉”这个字,所以我必须把它的起始位置调到防止出现这种误判情况的最佳位置,这里我调到了4是因为在4之前存在可能出现汉字的“姓名”一栏,之后除了民族不会出现,如果这里的输入限制没那么多,我们仍然可以调节搜索范围来提高判断的精度。

 

你可能感兴趣的:(JAVA,习题)