目录
Demo51 (十进制到八进制)编写程序,提示用户输人一个十进制整数,然后显示对应的八进制值。在这个程序中不要使用Java的Interger.to0ctalString(int)方法。
Demo52 (最大数的出现次数)编写程序读取整数,找出它们的最大数,然后计算该数的出现次数。
Demo54 可以通过询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都询问生日是否是5个数字集合中的一个。
Demo55 十六进制记数系统有16个数字:0~9,A~F。字母A、B、C、D、E和F对应于十进制数字10、11、12、13、14和15。我们现在写一个程序,提示用户输入一个十六进制数字,显示它对应的十进制数。
Demo56 (几何:五边形的面积)编写程序,提示用户输入从五边形中心到顶点的距离,计算五边形的面积,如右图所示。
Demo57 (几何:正多边形的面积)编写一个程序,提示用户输入边的个数以及正多边形的边长,然后显示它的面积。
Demo58 (给出ASCII码对应的字符)编写一个程序,得到一个ASCII码的输入(0~~127之间的一个整数),然后显示该字符。
Demo59 (十进制转十六进制)编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。
Demo60 (检测子串)编写一个程序,提示用户输人两个字符串,检测第二个字符串是否是第一个字符串的子串。
Demo51 (十进制到八进制)编写程序,提示用户输人一个十进制整数,然后显示对应的八进制值。在这个程序中不要使用Java的Interger.to0ctalString(int)方法。
这里我使用了循环和递归两种方式:
package Exer;
import java.util.Scanner;
public class Demo51 {
/*
(十进制到八进制)编写程序,提示用户输人一个十进制整数,然后显示对应的八进制值。
在这个程序中不要使用Java的Integer.toOctalString(int)方法。
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scan.nextInt();
// System.out.println(Integer.toOctalString(num));
System.out.println(toOctal(num));
System.out.println(toOctal1(num));
}
/*
44
5 4 ==> 54
*/
private static String toOctal(int num) {
StringBuilder s = new StringBuilder();
while (num / 8 > 0) {
s.insert(0, num % 8);
num /= 8;
}
s.insert(0, num);
return s.toString();
}
private static String toOctal1(int num) {
if (num < 8) {
return num + "";
}
return toOctal(num / 8) + num % 8;
}
}
结果:
Demo52 (最大数的出现次数)编写程序读取整数,找出它们的最大数,然后计算该数的出现次数。
假设输入是以0结束的。假定输入是3 5 2 5 5 5 0,程序找出最大数5,而5出现的次数是4。提示:维护max和count两个变量。max存储当前最大数,而count存储它的出现次数。初始状态时,将第一个数赋值给max而将count赋值为1。然后将接下来的每个数字逐个地和max进行比陵。如果这个数大于max,就将它赋值给max,同时将count重置为1。如果这个数等于max,就给count 加1。
package Exer;
import java.util.Scanner;
public class Demo52 {
/*
Demo52 (最大数的出现次数)编写程序读取整数,找出它们的最大数,然后计算该数的出现次数。
假设输入是以0结束的。假定输入是3 5 2 5 5 5 0,程序找出最大数5,而5出现的次数是4。
提示:维护max和count两个变量。max存储当前最大数,而count存储它的出现次数。
初始状态时,将第一个数赋值给max而将count赋值为1。然后将接下来的每个数字逐个地和max进行比陵。
如果这个数大于max,就将它赋值给max,同时将count重置为1。如果这个数等于max,就给count 加1。
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入一系列整数(输入0结束):");
int max = scan.nextInt();
int count = 1;
while (true) {
int num2 = scan.nextInt();
if (num2 != 0) {
if (max < num2) {
max = num2;
count = 1;
} else if (max == num2) {
count++;
}
} else {
break;
}
}
System.out.println(max);
System.out.println(count);
}
}
结果:
Demo53 可以使用数学方法求解许多计算问题。比如,给定一个三角形的三条边,可以通过以下公式计算角度。
package Exer;
import java.util.Scanner;
public class Demo53 {
/*
可以使用数学方法求解许多计算问题。比如,给定一个三角形的三条边,可以通过以下公式计算角度。
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入三角形的三条边:");
double a = scan.nextInt();
double b = scan.nextInt();
double c = scan.nextInt();
double A = countAngle(a, b, c);
double B = countAngle(b, a, c);
double C = countAngle(c, b, a);
// System.out.println(String.format("A角%f, B角%f, C角%f", A, B, C));
System.out.printf("A角%.2f, B角%.2f, C角%.2f%n", A, B, C);
}
private static double countAngle(double a, double b, double c) {
double angle = 0;
angle = Math.toDegrees(Math.acos((a * a - b * b - c * c) / (-2 * b * c)));
return angle;
}
}
结果:
Demo54 可以通过询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都询问生日是否是5个数字集合中的一个。
生日是出现这一天的每个集合的第一个数字的和。例如:如果生日是19,那么它会出现在集合1、集合2和集合5中。这三个集合的第一个数字分别是1、2和16。它们的和就是19。
package Exer;
import java.util.Scanner;
public class Demo54 {
/*
可以通过询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都询问生日是否是5个数字集合中的一个。
生日是出现这一天的每个集合的第一个数字的和。例如:如果生日是19,那么它会出现在集合1、集合2和集合5中。
这三个集合的第一个数字分别是1、2和16。它们的和就是19。
*/
public static void main(String[] args) {
String set1 = " 1 3 5 7\n" + " 9 11 13 15\n"
+ "17 19 21 23\n" + "25 27 29 31";
String set2 = " 2 3 6 7\n" + "10 11 14 15\n"
+ "18 19 22 23\n" + "26 27 30 31";
String set3 = " 4 5 6 7\n" + "12 13 14 15\n"
+ "20 21 22 23\n" + "28 29 30 31";
String set4 = " 8 9 10 11\n" + "12 13 14 15\n"
+ "24 25 26 27\n" + "28 29 30 31";
String set5 = "16 17 18 19\n" + "20 21 22 23\n"
+ "24 25 26 27\n" + "28 29 30 31";
System.out.println("集合1:\n" + set1);
System.out.println("集合2:\n" + set2);
System.out.println("集合3:\n" + set3);
System.out.println("集合4:\n" + set4);
System.out.println("集合5:\n" + set5);
guessBirth();
}
private static void guessBirth() {
Scanner scan = new Scanner(System.in);
int birth = 0;
for (int i = 1; i <= 5; i++){
System.out.printf("生日是否是数字集合%d中的一个(请回答是或否):", i);
String answer = scan.next();
if (answer.equals("是")) {
birth += Math.pow(2, i-1);
}
}
System.out.println("生日是:" + birth);
scan.close();
}
}
结果:
Demo55 十六进制记数系统有16个数字:0~9,A~F。字母A、B、C、D、E和F对应于十进制数字10、11、12、13、14和15。我们现在写一个程序,提示用户输入一个十六进制数字,显示它对应的十进制数。
package Exer;
import java.util.Scanner;
public class Demo55 {
/*
Demo55. 十六进制记数系统有16个数字:0~9,A~F。
字母A、B、C、D、E和F对应于十进制数字10、11、12、13、14和15。
我们现在写一个程序,提示用户输入一个十六进制数字,显示它对应的十进制数。
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个十六进制数字:");
String hex = scan.next();
int decimal = hexToDecimal(hex);
System.out.println(decimal);
}
/*
A1
A*16^1 + 1*16^0 = 161
*/
private static int hexToDecimal(String hex) {
int decimal = 0;
int j = 0; // 位数-1
for (int i = hex.length() - 1; i >= 0; i--) {
if (hex.charAt(i) <= '9') {
decimal += (hex.charAt(i) - '1' + 1) * (int) (Math.pow(16, j++));
} else {
decimal += (hex.charAt(i) - 'A' + 10) * (int) (Math.pow(16, j++));
}
}
return decimal;
}
}
结果:
Demo56 (几何:五边形的面积)编写程序,提示用户输入从五边形中心到顶点的距离,计算五边形的面积,如右图所示。
计算五边形面积的公式为:面积 = (5 × s²) / (4 × tan(π / 5)),其中s是边长。边长可以使用公式s = 2r sin(π / 5) 计算,其中r是从五边形中心到顶点的距离。结果保留小数点后两位数字。下面是一个运行示例:
package Exer;
import java.util.Scanner;
public class Demo56 {
/*
Demo56 (几何:五边形的面积)编写程序,提示用户输入从五边形中心到顶点的距离,计算五边形的面积,如右图所示。
计算五边形面积的公式为:面积 = (5 × s²) / (4 × tan(π / 5)),其中s是边长。
边长可以使用公式s = 2r sin(π / 5) 计算,其中r是从五边形中心到顶点的距离。
结果保留小数点后两位数字。下面是一个运行示例:
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入从五边形中心到顶点的距离:");
double r = scan.nextDouble();
double area = opentagonArea(r);
System.out.println(area);
}
private static double opentagonArea(double r) {
double area;
double s = 2 * r * Math.sin(Math.PI / 5);
area = (5 * Math.pow(s, 2)) / (4 * Math.tan(Math.PI / 5));
return area;
}
}
结果:
Demo57 (几何:正多边形的面积)编写一个程序,提示用户输入边的个数以及正多边形的边长,然后显示它的面积。
正多边形是一个n条边的多边形,它每条边的长度都相等,而且所有角的度数也相等(即多边形既等边又等角)。计算正多边形面积的公式是:面积 = (n × s²) / (4 × tan(π / n)) 这里,s是边长。这里是一个运行示例:
import java.util.Scanner;
public class Demo57 {
/*
Demo57. (几何:正多边形的面积)编写一个程序,提示用户输入边的个数以及正多边形的边长,然后显示它的面积。
正多边形是一个n条边的多边形,它每条边的长度都相等,而且所有角的度数也相等(即多边形既等边又等角)。
计算正多边形面积的公式是:面积 = (n × s²) / (4 × tan(π / n)) 这里,s是边长。这里是一个运行示例:
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入多边形边的个数:");
double n = scan.nextDouble();
System.out.println("正多边形的边长:");
double s = scan.nextDouble();
double area = polygonArea(n, s);
System.out.println(area);
}
private static double polygonArea(double n, double s) {
return (n * Math.pow(s, 2)) / (4 * Math.tan(Math.PI / n));
}
}
结果:
Demo58 (给出ASCII码对应的字符)编写一个程序,得到一个ASCII码的输入(0~~127之间的一个整数),然后显示该字符。
下面是一个运行示例:
package Exer;
import java.util.Scanner;
public class Demo58 {
/*
(给出ASCII码对应的字符)编写一个程序,得到一个ASCII码的输入(0~~127之间的一个整数),然后显示该字符。
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个0~127之间的整数:");
int num = scan.nextInt();
asciiToChar(num);
scan.close();
}
private static void asciiToChar(int num) {
System.out.println((char) num);
}
}
结果:
Demo59 (十进制转十六进制)编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。
下面是一个运行示例:
import java.util.Scanner;
public class Demo59 {
/*
(十进制转十六进制)编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入一个0~15之间的整数:");
int num = scan.nextInt();
if (num < 0 || num > 15) {
System.out.println(num + " 是一个无效输入");
}else if (num < 10) {
System.out.println("十六进制值为:" + num);
}else {
System.out.println("十六进制值为:" + (char)(num - 10 + 'A'));
}
scan.close();
}
}
结果:
Demo60 (检测子串)编写一个程序,提示用户输人两个字符串,检测第二个字符串是否是第一个字符串的子串。
import java.util.Scanner;
public class Demo60 {
/*
Demo60. (检测子串)编写一个程序,提示用户输人两个字符串,检测第二个字符串是否是第一个字符串的子串。
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入第一个字符串:");
String s1 = scan.next();
System.out.print("请输入第二个字符串:");
String s2 = scan.next();
judgeStringSub(s1, s2);
}
private static void judgeStringSub(String s1, String s2) {
String maxStr = s1.length() > s2.length() ? s1: s2;
String minStr = s1.length() < s2.length() ? s1: s2;
// boolean isFlag = true;
int j = 0;
for (int i = 0; i <= maxStr.length(); i++) {
if (i > maxStr.length() - minStr.length() && j == 0) {
break;
}
if (j < minStr.length() && minStr.charAt(j) == maxStr.charAt(i)) {
j++;
}else if (j < minStr.length() && minStr.charAt(j) != maxStr.charAt(i)) {
j = 0;
}
}
if (j == minStr.length()) {
System.out.println(minStr + "是" + maxStr + "的" + "字串");
} else {
System.out.println(minStr + "不是" + maxStr + "的" + "字串");
}
}
}
结果: