输出汉字在Unicode的位置
题目:用Java编写程序,给出汉字“你”,“我”,“他”在Unicode表中的位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Main { public static void main(String[] args) { // 汉字"你" 、"我" 、"他" 的Unicode编码 char you = '你' ; char me = '我' ; char him = '他' ; // 获取它们在Unicode表中的位置(即Unicode编码) int unicodeOfYou = (int ) you; int unicodeOfMe = (int ) me; int unicodeOfHim = (int ) him; System.out.println("汉字'你'在Unicode表中的位置: " + unicodeOfYou); System.out.println("汉字'我'在Unicode表中的位置: " + unicodeOfMe); System.out.println("汉字'他'在Unicode表中的位置: " + unicodeOfHim); } }
注:
将这三个字符变量转换成整型(int类型),存储各自对应的Unicode编码。在Java中,字符类型可以隐式转换为整型,转换的结果就是该字符在Unicode编码表中的位置。
1 2 3 int unicodeOfYou = (int ) you;int unicodeOfMe = (int ) me;int unicodeOfHim = (int ) him;
输出希腊字母
编写一个Java应用程序,输出全部的希腊字母
分析::可以通过循环遍历相应的Unicode范围来实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class GreekAlphabetPrinter { public static void main (String[] args) { System.out.println("小写希腊字母:" ); for (char c = '\u03B1' ; c <= '\u03C9' ; c++) { System.out.print(c + " " ); } System.out.println(); System.out.println("大写希腊字母:" ); for (char c = '\u0391' ; c <= '\u03A9' ; c++) { System.out.print(c + " " ); } } }
\u03B1
是小写希腊字母 α(alpha)的Unicode编码。
\u03C9
是小写希腊字母 ω(omega)的Unicode编码。
\u0391
是大写希腊字母 Α(Alpha)的Unicode编码。
\u03A9
是大写希腊字母 Ω(Omega)的Unicode编码。
异或运算符的加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class summation { public static void main (String[] args) { char a1='十' ,a2='点' ,a3='进' ,a4='攻' ; char secret='A' ; a1=(char )(a1^secret); a2=(char )(a2^secret); a3=(char )(a3^secret); a4=(char )(a4^secret); System.out.println("密文:" +a1+a2+a3+a4); a1=(char )(a1^secret); a2=(char )(a2^secret); a3=(char )(a3^secret); a4=(char )(a4^secret); System.out.println("原文:" +a1+a2+a3+a4); } }
分析:异或运算是具有自反性的,即同一个字符异或两次相同字符会得到原字符,所以这是一种可逆加密。
求和
问题1:用Java编写应用程序,求1!+2!+3!..10!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class FactorialSumCalculator { public static void main (String[] args) { long sum = 0 ; for (int i = 1 ; i <= 10 ; i++) { sum += factorial(i); } System.out.println("1! + 2! + 3! + ... + 10! 的和是: " + sum); } private static long factorial (int n) { if (n == 0 || n == 1 ) { return 1L ; } else { return n * factorial(n - 1 ); } } }
分析:factorial
函数是一个递归函数,用于计算阶乘。当输入的n等于0或1时,返回1(因为0!和1!都等于1),否则递归调用自身计算n-1的阶乘并乘以当前的n。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class summation { public static void main(String[] args) { double sum = 0 ; int i = 1 , n = 10 ; int factorial = 1 ; // 新增变量用于保存当前项的阶乘值 while (i <= n) { factorial *= i; // 计算当前项的阶乘值 sum += factorial; // 将当前阶乘值累加到总和中 i += 1 ; } System.out.println("1! + 2! + 3! + ... + 10! 的结果是: " + sum ); } }
问题2:求e的近似值
1 2 3 4 5 6 7 8 9 10 11 public class fractions { public static void main (String args[]) { int i=0 ,n=20 ; double num=0 ,item=1 ; for (i=1 ;i<n;i++){ num+=item; item*=(1.0 /i); } System.out.println("num=" +num); } }
通过改变n的值使求出的e的值更加准确
问题3:求1+3+5+7+9的和同时求100以内的素数
1 2 3 4 5 6 7 8 9 10 11 12 public class summation { public static void main (String[] args) { int i, num = 0 , j; int con = 10 ; for (i = 1 ; i <= con; i++) { if (i % 2 == 0 ) { continue ; } num += i; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class summation { public static void main (String[] args) { int oddSum = 0 ; for (int i = 1 ; i <= 10 ; i += 2 ) { oddSum += i; } System.out.println("1+3+5+7+9的值是: " + oddSum); for (int j = 2 ; j <= 100 ; j++) { boolean isPrime = true ; for (int i = 2 ; i * i <= j; i++) { if (j % i == 0 ) { isPrime = false ; break ; } } if (isPrime) { System.out.println(" " + j + "是素数" ); } } } }
关键点:
内部的 for
循环从2开始遍历至 i * i <= j
,这是因为若 j
不是素数,则它一定有一个因子小于等于它的平方根。这样可以显著减少检查的次数
问题3:分别用do-while和for循环计算1+1/2!+1/3!+1/4!+…的前20项之和
1 2 3 4 5 6 7 8 9 10 11 12 13 public class summation { public static void main (String[] args) { int i = 1 ; double m = 1.0 ; double sum = 0 ; do { m *= 1.0 / i; sum += m; i += 1 ; } while (i <= 20 ); System.out.println("1+1/2!+1/3!+1/4!+...的结果是:" + String.format("%.5f" , sum)); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class summation { public static void main (String[] args) { double sum = 0.0 ; double factorial = 1.0 ; for (int i = 1 ; i <= 20 ; i++) { factorial *= i; sum += 1.0 / factorial; } System.out.println("1+1/2!+1/3!+1/4!+...的结果是:" + String.format("%.5f" , sum)); } }
注:因为精度问题,所以写的是1.0,0.0,而不是 1 , 0
问题4:
编写应用程序,使用for循环语句计算8+88+888+…的前10项之和
1 2 3 4 5 6 7 8 9 10 11 12 public class summation { public static void main (String[] args) { int num=8 ; double sum=0 ; for (int i=0 ;i<10 ;i++){ sum+=num; num*=10 ; } System.out.println("8+88+888+...的前10项之和为:" + sum); } }
switch语句练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import java.util.Scanner;public class Switch { public static void main (String []args) { int number=0 ; System.out.println("输入正整数(回车确定)" ); Scanner reader = new Scanner (System.in); number =reader.nextInt(); switch (number){ case 9 : case 131 : case 12 :System.out.println(number+"是三等奖" ); break ; case 209 : case 596 : case 27 :System.out.println(number+"是二等奖" ); break ; case 875 : case 316 : case 59 :System.out.println(number+"是一等奖" ); break ; default :System.out.println(number+"未中奖" ); } } }
分析:
Scanner reader = new Scanner(System.in);
创建了一个 Scanner
对象 reader
,它用于读取标准输入流(即键盘输入)。System.in
是Java系统内置的输入流对象,指向标准输入设备,默认情况下就是键盘。
number = reader.nextInt();
这一行则是通过 reader
对象从标准输入流中读取用户输入的一个整数值,并将其赋值给变量 number
。nextInt()
方法会等待用户在控制台输入一个整数并按回车键确认后,将该整数值读取并返回。
遍历数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class traversing { public static void main (String[]args) { int a[]={1 ,2 ,3 ,4 }; char b[]={'a' ,'b' ,'c' ,'d' }; for (int n=0 ;n<a.length;n++){ System.out.println(a[n]); } for (int n=0 ;n<b.length;n++){ System.out.println(b[n]); } for (int i:a){ System.out.println(i); } for (char ch:b){ System.out.println(ch); } } }
求出1000以内的所有完数
如果一个数恰好等于他的因子之和,则这个数称为完数,编写应用程序求1000以内的所有完数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public class PerferNum { public static void main (String[] args) { String perfectNumbers = "" ; for (int number = 1 ; number <= 1000 ; number++) { int sum = 0 ; for (int i = 1 ; i < number; i++) { if (number % i == 0 ) { sum += i; } } if (sum == number) { perfectNumbers += number + (perfectNumbers.isEmpty() ? "" : ", " ); } } System.out.println("1000 以内的所有完数: " + perfectNumbers); } }
1 perfectNumbers += number + (perfectNumbers.isEmpty() ? "" : ", ");
这段代码的作用是将找到的完数(number
)添加到字符串 perfectNumbers
的末尾,并在添加新的完数之前,如果 perfectNumbers
中已经有其他完数,则在它们之间添加一个逗号(,
)作为分隔符。
求最大正整数
编写应用程序,输出满足1+2+3+…+n<8888的最大正整数n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class GreatPosInte { public static void main (String []args) { double sum=0 ; int n=0 ; for (int i=0 ;;i++){ sum+=i; if (sum<=8888 ){ continue ; } if (sum>8888 ){ n=i-1 ; break ; } } System.out.println("1+2+3+....+n<8888的最大正整数n为:" +n); } }