JAVA基础编程50题(22-24题)详解

一、描述

题目1:统计输入的一段字符串,分别统计这个字符串中大小写字母的个数,以及数字出现的次数。

第一种方法使用Character封装类的方法:isLowerCase(),isUpperCase(),isDigit()判断是否是该类字符, 第二种方法是直接使用char字符范围比较来统计。

题目2:用户输入一串待统计的字符串,然后输入用户想要统计的某个单词或者字符的次数。

比如我输入如下字符串:fdhiaojavajidaoijdjava

我要统计其中的java字符串的个数。

解题思路:传入待统计字符串str,以及需要统计的单词key,然后利用java自带的indexOf()找到首次出现该单词的位置,

统计次数加1,并把前面统计过的字符串截去,在剩下的字段中匹配。

题目3:打印任意行数的杨辉三角,如下所示为8行的杨辉三角。

解题思路:杨辉三角主对角线和第一列数字全为1,除此之外当前数字是上方数字+上方前一个数字的和,表示为二维数组即:a[i][j]=a[i][j-1]+a[i-1][j-1]。

二、源代码

源代码1:

package com.yue.day11;

import java.util.Scanner;

public class StaticsStr {

	/**
	 * 统计输入的一段字符串,分别统计这个字符串中大小写字母的个数,以及数字的个数
	 * 第一种方法:使用Character封装类的方法:isLowerCase(),isUpperCase(),isDigit()判断是否是该类字符.
	 * 第二种方法:直接使用char字符范围比较来统计
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("Please input a String to count the times of number,char:");
		Scanner sc = new Scanner(System.in);
		String input = sc.next();
		commonStaticStr(input);
		CharStaticStr(input);
	}

	private static void CharStaticStr(String input) {
		//使用Character封装类的:isLowerCase(),isUpperCase(),isDigit()方法.
		int digitCount = 0;
		int bigCount = 0;
		int smallCount = 0;
		char[] chArr = input.toCharArray();

		for (int i = 0; i < chArr.length; i++) {
			char ch = chArr[i];
			if (Character.isDigit(ch)) {
				digitCount++;
			} else if (Character.isLowerCase(ch)) {
				smallCount++;
			} else if (Character.isUpperCase(ch)) {
				bigCount++;
			} else {
				continue;
			}
		}
		System.out.println("方法一统计结果:number:" + digitCount + " ,bigChar:" + bigCount
				+ " ,smallChar:" + smallCount);

	}

	private static void commonStaticStr(String input) {
		//使用char字符的比较来统计
		int digitCount = 0;
		int bigCount = 0;
		int smallCount = 0;
		for (int i = 0; i < input.length(); i++) {
			char ch = input.charAt(i);
			if (ch >= '0' && ch <= '9') {
				digitCount++;
			} else if (ch >= 'a' && ch <= 'z') {
				smallCount++;
			} else if (ch >= 'A' && ch <= 'Z') {
				bigCount++;
			} else {
				continue;
			}
		}
		System.out.println("方法二统计结果:number:" + digitCount + " ,bigChar:" + bigCount
				+ " ,smallChar:" + smallCount);

	}

}

运行结果:

源代码2:

package com.yue.day11;

import java.util.Scanner;

public class StatisticStr {

	/**
	 * 用户输入一串待统计的字符串,然后输入用户想要统计的某个单词或者字符的次数
	 * 比如我输入如下字符串:fdhiaojavajidaoijdjava
	 * 我要统计其中的java字符串的个数。
	 * 解题思路:传入待统计字符串str,以及需要统计的单词key,然后利用java自带的indexOf()找到首次出现该单词的位置,
		                 统计次数加1,并把前面统计过的字符串截去,在剩下的字段中匹配。
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("Please input a String:");
		String str = sc.nextLine();
		System.out.println("Please input the string you want to count:");
		String key = sc.nextLine();
		int times = statisticString(str,key);
		System.out.println(times);
		sc.close();
	}

	private static int statisticString(String str,String key) {
		// 传入待统计字符串str,以及需要统计的单词key,然后利用java自带的indexOf()找到首次出现该单词的位置,
		//统计次数加1,并把前面统计过的字符串截去,在剩下的字段中匹配。
		int times = 0;
		while (true) {
			int index = str.indexOf(key);
			if (index != -1) {
				times++;
				str = str.substring(index + key.length());
			}else{
				return times;
			}
		}

	}

}

运行结果:

源代码3:

package com.yue.day11;

import java.util.Scanner;

public class YangHuiTri {

	/**
	 * 打印任意行数的杨辉三角,如下所示为8行的杨辉三角
1
1	1
1	2	1
1	3	3	1
1	4	6	4	1
1	5	10	10	5	1
1	6	15	20	15	6	1
1	7	21	35	35	21	7	1
		解题思路:杨辉三角主对角线和第一列数字全为1,除此之外当前数字是上方数字+上方前一个数字的和
		表示为二维数组即:a[i][j]=a[i][j-1]+a[i-1][j-1]
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("请输入要打印的杨辉三角的行数(1-50):");
		Scanner scanner = new Scanner(System.in);
		int line = scanner.nextInt();
		while(line<=0||line>50){
			System.out.println("您输入的数字有误,请重新输入要打印的杨辉三角的行数(1-50):");
			line = scanner.nextInt();
		}
		printYangHuiTri(line);

	}

	private static void printYangHuiTri(int line) {
		// 打印杨辉三角:杨辉三角主对角线和第一列数字全为1,除此之外当前数字是上方数字+上方前一个数字的和.
		//表示为二维数组即:a[i][j]=a[i][j-1]+a[i-1][j-1]

		int[][] arr = new int[line][];

		for (int i = 0; i < arr.length; i++) {
			arr[i] = new int[i + 1];
			for (int j = 0; j <= i; j++) {
				if (j == 0) {
					arr[i][j] = 1;
				} else if (i == j) {
					arr[i][j] = 1;
				} else {
					arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
				}

			}
		}
		//调用循环遍历数组的方法
		printArrayLine(arr);

	}

	private static void printArrayLine(int[][] arr) {
		// 循环遍历数组

		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + "\t");

			}
			System.out.println();
		}

	}
}

运行结果:

时间: 2024-12-15 01:56:49

JAVA基础编程50题(22-24题)详解的相关文章

JAVA基础编程50题(7-9题)详解

一.描述 1.输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的总个数和每个字符出现的频率. 程序分析:使用String类的matchs()分别统计符合正则表达式的每类字符的总个数,然后分别使用List和Map集合类统计每个字符出现的频率. 2.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制. 3.题目:一个数如果恰好等于它的因子之和,这个数就称为"完数",即除了本身

JAVA基础编程50题(4-6题)详解

一.描述 1.将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,输出之前的所有因子. (2)如果n!=k,但n能被k整除,则应打印出k的值,并用n除以k的商作为新的正整数n,重复执行第一步. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步. 2.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之

JAVA基础编程50题(1-3题)详解

一.题目描述 1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... ,该题其实就是斐波那契数列的一种. 2.判断m-n之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数n分别去除2到sqrt(n),这里是Math自带的函数sqrt()求该数的平方根,如果能被整除,则表明此数不是素数,反之是素数. 3.打印出所有的

JAVA基础编程50题(10-12题)详解

一.描述 1.一球从m米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第n次落地时,共经过多少米?第10次反弹多高? 2.有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.但是必须满足每一位上的数字各不相同,根据排列组合原理总共有4*3*2=24种. 3.企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高

JAVA基础编程50题(13-15题)详解

一.描述 1.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后再平方等于原数则符合结果. 2.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天. 3.输入三个整数x,y,z,请把这三个数由小到大输出. 程序分析:将最小的数放到x上,先

JAVA基础编程50题(25-27题)详解

一.描述 题目1:判断一个数字是否是2的阶次方数,例如8,16,64,256都是2的阶次方数. 题目解析:如果一个数是2的阶次方数,那么这个数字的二进制数的首位为1,后面跟着若干个0,例如8用二进制表示为1000,64为1000000, 如果让这个数减1,然后和这个数做按位&运算即得0,即(number-1)&number==0,8&7=1000&0111=0000. 题目2:列出一个数组中所有元素的组合,比如1.2.3列出来为1.12.123.13.132.2.21.21

java基础编程题

java基础编程题 1.打印出如下图案 1 public class Prog19{ 2 public static void main(String[] args){ 3 int n = 5; 4 printStar(n); 5 } 6 7 //打印星星 8 private static void printStar(int n){ 9 //打印上半部分 10 for(int i=0;i<n;i++){ 11 for(int j=0;j<2*n;j++){ 12 if(j<n-i) 1

6、50道JAVA基础编程练习题跟答案

1 50道JAVA基础编程练习题 2 [程序1] 3 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 4 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 5 public class Prog1{ 6 public static void main(String[] args){ 7 int n = 10; 8 System.out.println("第"+n+

50道JAVA基础编程练习题

50道JAVA基础编程练习题[程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....public class Prog1{public static void main(String[] args){ int n = 10; System.out.println("第"+n+"个月兔子总数为"+f