1.大小写转换
输入一串字母
1.将大写转换为小写,小写转换为大写
2.将其全转换为小写
3.将其全转换为大写
import java.util.Scanner;
public class Conversion {
public static void main(String[] args) {
//输入一串字母
//1.将其全转换为小写
//2.将其全转换为大写
//3.将大写转换为小写,小写转换为大写
System.out.println("enter a string:");
Scanner sc=new Scanner(System.in);
//输入一串字符
String s=sc.nextLine();
char[] arr=new char[s.length()];
//将这串字符保存到字符数组中
//因为无法直接对s.charAt(i)进行操作
for(int i=0;i<arr.length;i++){
arr[i]=s.charAt(i);
}
//大小写互换
//大小写字母之间相差32
for(int i=0;i<arr.length;i++){
if(arr[i]>='A'&&arr[i]<='Z'){
arr[i]+=32;
}else{
arr[i]-=32;
}
}
printArr(arr);
//全部转换为大写
for(int i=0;i<arr.length;i++){
if(arr[i]>='a'&&arr[i]<='z'){
arr[i]-=32;
}
}
printArr(arr);
//全部转换为小写
for(int i=0;i<arr.length;i++){
if(arr[i]>='A'&&arr[i]<='Z'){
arr[i]+=32;
}
}
printArr(arr);
}
//输出字符串
public static void printArr(char[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
System.out.println();
}
}
运行结果
enter a string:
Hello World
hELLO
2.兔子生兔子问题
兔子生兔子问题(斐波那契数列:1、1、2、3、5、8、13……)
f(n)=f(n-1)+f(n-2)
输入一个月份,输出从第一个月到这个月之间每个月的兔子数量
import java.util.Scanner;
public class FibonacciSeries {
public static void main(String[] args) {
//兔子生兔子问题(斐波那契数列:1、1、2、3、5、8、13……)
//f(n)=f(n-1)+f(n-2)
//输入一个月份,输出从第一个月到这个月之间每个月的兔子数量
Scanner sc=new Scanner(System.in);
System.out.println("enter a month");
//输入一个月份
int month=sc.nextInt();
//计算每个月兔子的数量并输出
for(int i=1;i<=month;i++){
int number=fibonacci(i);
System.out.printf("month%d:%d\n",i,number);
}
}
//运用递归计算第n个月兔子的数量
public static int fibonacci(int n){
if(n==1||n==2){
return 1;
}else{
return fibonacci(n-1)+fibonacci(n-2);
}
}
}
运行结果
enter a month
12
month1:1
month2:1
month3:2
month4:3
month5:5
month6:8
month7:13
month8:21
month9:34
month10:55
month11:89
month12:144
3.狼追兔子问题
狼追兔子问题
有环形分布的十个洞,一只兔子躲在其中一个洞中,
狼在第一个洞中没有找到兔子,就到第三个洞中去找,
在第三个洞中没有找到,就到第六个洞中去找,
然后是第十个、第十五个、第二十一个,依次类推,
但并没有第十五个、第二十一个洞,实际上是第五个、第一个,
结果一直找不到兔子,问:兔子可能在哪个洞中?
因为程序无法真的运行无数次再输出结果,所以此处运行100次。
public class WolfChasingRabbit {
public static void main(String[] args) {
//狼追兔子问题
/* 有环形分布的十个洞,一只兔子躲在其中一个洞中,
* 狼在第一个洞中没有找到兔子,就到第三个洞中去找,
* 在第三个洞中没有找到,就到第六个洞中去找,
* 然后是第十个、第十五个、第二十一个,依次类推,
* 但并没有第十五个、第二十一个洞,实际上是第五个、第一个,
* 结果一直找不到兔子,问:兔子可能在哪个洞中?
* 因为程序无法真的运行无数次再输出结果,所以此处运行100次。
*/
//用一个数组来表示十个洞的情况
boolean[] hole=new boolean[10];
//用来表示下一个洞的号码
int wolf=0;
for(int i=0;i<100;i++){
//被狼找过的洞标记为true
hole[wolf]=true;
wolf+=(i+1);
//因为是在十个洞中循环寻找所以对十取余
wolf%=10;
}
//判断数组十个元素是否被改为true(布尔型数组默认值为false)
for(int j=0;j<hole.length;j++){
//如果是false,说明没有被标记过,则输出
if(!hole[j]){
//j为索引,要表示洞的号码要加一
System.out.println("兔子可能在第"+(j+1)+"个洞中");
}
}
}
}
运行结果
兔子可能在第3个洞中
兔子可能在第5个洞中
兔子可能在第8个洞中
兔子可能在第10个洞中
4.判断英文句子
输入任意一段英文句子判断句子中有几个单词、字母、标点符号
import java.util.Scanner;
public class NumberOfWords {
public static void main(String[] args) {
//输入任意一段英文句子判断句子中有几个单词、字母、标点符号
System.out.println("enter a sentence:");
//输入一个句子
Scanner sc=new Scanner(System.in);
//接收一串字符以回车结束
String s=sc.nextLine();
//记录原始空格数量(真实的空格数量)
int count5=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)==' '){
count5++;
}
}
//去除字符串中首尾的空格并接收
String ss=s.trim();
//用于记录字符串间的有效空格数量
//有效空格:后面跟的是字母
int count1=0;
//用于记录字符串中标点符号数量
int count2=0;
//用于记录字符串中有效标点符号数量
//有效标点符号:后面跟的是字母
int count3=0;
//用于记录字符串间的空格数量
int count4=0;
for(int i=0;i<ss.length();i++){
//是空格,则空格记录加一
if(ss.charAt(i)==' '){
count4++;
}
//是空格,且后一个字符为字母,有效空格记录加一
if(ss.charAt(i)==' '){
//(i+1)!=ss.length()是为了防止索引越界
if((i+1)!=ss.length()&&(ss.charAt(i+1)>='A'&&ss.charAt(i+1)<='z')){
count1++;
}
}
//既不是空格也不是字母,标点符号记录加一
if(ss.charAt(i)!=' '&&(ss.charAt(i)<'A'||ss.charAt(i)>'z')){
count2++;
//既不是空格也不是字母,且后一个字符是字母,有效标点符号记录加一
if((i+1)!=ss.length()&&ss.charAt(i+1)>='A'&&ss.charAt(i+1)<='z'){
count3++;
}
}
}
//单词数量为:有效空格数量加有效标点数加一
System.out.printf("有%d个单词\n",(count1+1+count3));
//字母数量为:字符串长度减空格数量再减标点符号数量
System.out.printf("有%d个字母\n",(ss.length()-count4-count2));
System.out.printf("有%d个空格\n",count5);
System.out.printf("有%d个标点符号\n",count2);
}
}
运行结果1
enter a sentence:
Hello! I am a student.
有5个单词
有16个字母
有5个空格
有2个标点符号
运行结果2
enter a sentence:
Hello ! I am a student .
有5个单词
有16个字母
有7个空格
有2个标点符号