1.1 问题
实现两个变量间的数据交换,例如:有两个整数类型变量a和b,现需要使变量a的值和变量b的值进行交换。例如: a的原值为100,b的原值为200,交换后a的值为200,b的值为100。
不使用中间变量来实现数据交换程序,即实现两个变量值的交换。可以先把a+b值赋给a,接着把a-b的值赋给b,最后把a-b的值在赋给a,请看如下代码:
1 public class SwapExt { 2 public static void main(String[] args) { 3 int a = 100; 4 int b = 200; 5 System.out.println("a=" + a + ", b=" + b); 6 a = a + b; 7 b = a - b; 8 a = a - b; 9 System.out.println("a=" + a + ", b=" + b); 10 } 11 }
2.1 问题
使用交互的方式计算*落体运动中物体的位置。用户从控制台输入*落体的时间t,系统计算经过时间t物体的*落体位移。计算结果保留一位小数并且输出到控制台。*落体位移公式为: s = 1/2 × g × t2 ,其中:
s (位移(m)
t (时间(s)
g (重力加速度(9.8m/s2)
1 import java.util.Scanner; 2 public class FreeFall { 3 public static void main(String[] args) { 4 Scanner scanner = new Scanner(System.in); 5 double g = 9.80; 6 System.out.println("请输入*下落的时间(秒):"); 7 double t = scanner.nextDouble(); 8 double s = 0.5 * g * t * t; 9 s = Math.round(10 * s) / 10.0;//保留一位小数 10 System.out.println(t + "秒后,物体*下落了" + s + "米"); 11 } 12 }
3.1 问题
系统使用交互的方式给三个数字进行排序。例如:接收用户输入的三个整数a,b,c,a的原值是20,b的原值是5,c的原值是10,排序后a的值为5,b的值为10,c的值为20。
- import java.util.Scanner;
- public classMaxofThree {
- public static void main(String[] args) {
- Scannerscanner = new Scanner(System.in);
- System.out.println("请依次输入三个整数:a,b,c(以空格隔开)");
- int a = scanner.nextInt();
- int b = scanner.nextInt();
- int c = scanner.nextInt();
- scanner.close();
- System.out.println("a=" + a + ", b=" + b + ", c=" + c);
- int temp = 0;
- if (a > b) {
- temp = a;
- a = b;
- b = temp;
- }
- if (a > c) {
- temp = a;
- a = c;
- c = temp;
- }
- if (b > c) {
- temp = b;
- b = c;
- c = temp;
- }
- System.out.println("a=" + a + ", b=" + b + ", c=" + c);
- }
- }
水仙花数问题
1 import java.util.Scanner; 2 public class Test { 3 /** 4 * 业务要求:计算某个范围内所有水仙花数 5 * 分析:1、找某个范围的水仙花数需要把这个范围内的每个数取出来判断,所以需要一个for循环取数, 6 * 从1开始到控制台输入的值(定义为range)。 7 * 2、判断某个数是不是水仙花数需要将该数的每一位都取出来,取出来的方法是定义一个变量last, 8 * 用来存这个数对10的余数,然后该数/10再对10取余数。。。这也是个循环,直到这个数变成零循环 9 * 停止。所以我们定义一个变量num用来存取出来的i的值,每次取余后都对num进行/10操作,当 10 * num==0时循环停止,便可以写出for(int num=i;num>0;num/=10){},取出来的每一位都要 11 * 求出自己的三次幂,再求和 12 * 3、得到的和sum需要与i比较,若相等,则打印出来 13 */ 14 public static void main(String[] args) { 15 Scanner in = new Scanner(System.in); 16 System.out.println("请输入查找水仙花的范围:0~"); 17 int range = in.nextInt(); 18 in.close(); 19 for (int i = 1; i < range; i++) { 20 int sum = 0;// 注意变量定义和赋初值的位置 21 for (int num = i; num > 0; num /= 10) { 22 int last = num % 10; 23 sum += last * last * last;// 每一轮开始sum都要清零 24 } 25 if (sum == i) { 26 System.out.println(i + "是水仙花数"); 27 } 28 } 29 } 30 }
计算百钱买百鸡的问题
1 public class Test { 2 /** 3 * 业务要求:计算百钱买百鸡 4 * 分析:假设公鸡x只,母鸡y只,小鸡z只,那么必须满足x+y+z=100,5x+3y+z/3=100,并且z能整除3。 5 * 用穷举法,从0开始一个一个带入去试,能满足条件就输出。 6 * 如果都是公鸡的话,100钱只能买20只,所以0<=x<20 7 * 如果是母鸡的话,100钱只能买30只,所以0<=y<300 8 * 如果是小鸡的话,就是100只减去x再减去y 9 */ 10 public static void main(String[] args) { 11 for(int x=0;x<20;x++){ 12 for(int y=0;y<30;y++){ 13 int z = 100-x-y; 14 if((z%3==0)&&(5*x+3*y+z/3==100)){ 15 System.out.println("公鸡:"+x+",母鸡:"+y+",小鸡:"+z); 16 } 17 } 18 } 19 } 20 }
猜字母游戏
1 import java.util.Random; 2 import java.util.Scanner; 3 4 public class Test { 5 /** 6 * 业务要求:猜字母游戏 7 * 系统随机产生5个不重复的字符,然后由用户输入一个5个字符的字符串,由程序判断这5个字符 8 * 和系统产生的5是否相同(字母和位置均相同)。如果相同,程序结束,如果不相同, 则输出比较结果以提示用户继续游戏。 9 * 分析: 10 * 1) char[] answer 被猜测字母序列 11 * 2) char[] input 用输入的字母序列 12 * 3) int count 猜测次数 13 * 4) int[] result = {字符匹配数量,匹配成功位置} 用户输入的序列和被猜测序列的比较结果 14 *功能分析设计: 15 * 1)随机生成 (generate) 16 * 方法算法功能描述:生成n个不重复的大写字母 17 * char[] generate(int n) 18 * 2)用户输入(Input) 19 * 方法算法功能描述:从控制台读取输入,返回5个大写字符 20 * char[] userInput() 21 * 3)检查(check)用户输入 22 * 方法算法功能描述:检查标准答案(answer)和用户输入 23 * (input),返回结果:{字符匹配数量,匹配成功位置} 24 * int[] check(char[] answer, char[] input) 25 * 4)提示猜中情况 26 * void show(int count, int[] result) 27 * 5) main 方法完成猜测流程控制 28 * 1)"生成答案"字符序列:5个字符 29 * 2)等待用户的答案输入 30 * 3)"检查用户输入"的答案,检查结果包含 匹配数量和匹配位置 31 * 4) 统计回答数量 32 * 5) 提示检查结果, 返回 (2) 33 */ 34 public static void main(String[] args) { 35 char[] answer; 36 char[] input; 37 int count=0; 38 int[] result; 39 answer = generate(5);//1)“生成答案”字符序列:5个字符 40 System.out.println(answer); 41 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 42 System.out.println("\t欢迎使用猜字母游戏"); 43 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 44 while (true) { 45 input = userInput();//2)等待用户的答案输入 46 result = check(answer,input);//“检查用户输入”的答案 47 count++; 48 show(count, result);//提示检查结果 49 if(result[0]==5&&result[1]==5){ 50 break;//猜对退出 51 } 52 } 53 } 54 public static char[] generate(int n) { 55 Random r = new Random(); 56 char[] letter = new char[26]; 57 char[] answer = new char[5]; 58 boolean[] used = new boolean[letter.length]; 59 for (int i = 0; i < 26; i++) { 60 letter[i] = (char) (i + 65); 61 } 62 int num,index=0; 63 do{ 64 num = r.nextInt(letter.length); 65 if(used[num]){ 66 continue; 67 } 68 answer[index++] = letter[num]; 69 used[num] = true; 70 }while(index!=n); 71 return answer; 72 } 73 public static char[] userInput() { 74 Scanner in = new Scanner(System.in); 75 char[] input = new char[5]; 76 String str = in.nextLine(); 77 while (str.length() != 5) { 78 System.out.println("您输入的字母长度不对,请重新输入"); 79 str = in.nextLine(); 80 } 81 input = str.toCharArray(); 82 return input; 83 } 84 public static int[] check(char[] answer, char[] input) { 85 int[] result = new int[2]; 86 for (int i = 0; i < answer.length; i++) { 87 for (int j = 0; j < input.length; j++) { 88 if (input[j] == answer[i]) { 89 result[0]++; 90 if (j == i) { 91 result[1]++; 92 } 93 break;//一旦找到一样的,就不用继续比对了 94 } 95 } 96 } 97 return result; 98 } 99 public static void show(int count,int[] result) { 100 System.out.println("猜测"+count+"次"); 101 System.out.println("你猜对了" + result[0] + "个字符,其中" + result[1] 102 + "个字符位置正确"); 103 if(result[0]==5&&result[1]==5){ 104 System.out.println("恭喜,猜中!"); 105 } 106 } 107 }
求质数
1 public class Test { 2 /** 3 * 业务要求:求某个范围内的所有质数 4 * 质数是只有1和自己本身两个约数的整数 5 * 6 */ 7 public static void main(String[] args) { 8 Scanner in = new Scanner(System.in); 9 System.out.println("请输入查找质数的范围:2~"); 10 int num = in.nextInt(); 11 in.close(); 12 for(int i=2;i<num;i++){ 13 boolean isPrime = true; 14 for(int j=2;j<=(int)Math.sqrt(i);j++){ 15 System.out.println("......"+(int)Math.sqrt(i)); 16 if(i%j==0){ 17 isPrime = false; 18 break; 19 } 20 } 21 if(isPrime){ 22 System.out.println(i+"是质数");} 23 } 24 } 25 }
求两个整数的最大公约数
1 import java.util.Scanner; 2 public class CommonDivisor { 3 public static void main(String[] args) { 4 Scanner scanner = new Scanner(System.in); 5 System.out.println("请输入第一个整数:"); 6 int first = scanner.nextInt(); 7 System.out.println("请输入第二个整数:"); 8 int second = scanner.nextInt(); 9 scanner.close(); 10 // 从两个整数中较小的数开始 11 int start = first > second ? second : first; 12 int n = 1; 13 for (n = start; n >= 1; n--) { 14 // 判断n是否是两个整数的约数 15 if ((first % n == 0) && (second % n == 0)) 16 break; 17 } 18 System.out.println(first + "和" + second 19 + "的最大公约数为:" + n); 20 } 21 }