JavaSE:第十七章:编程测试题

简介: JavaSE:第十七章:编程测试题

**练习:求1+2!+3!+...+20!的和**


long sum = 0;
    for (int i = 1; i <= 20; i++) {
        long temp= 1;
        for (int j = 1; j <= i; j++) {
            temp *= j;
        }
        sum += temp;
    }
    System.out.println(sum);

结果为:2561327494111820313


**练习:获取字串中各个的字符数量**


public static void main(String[] args) {
            String string = "中国,国国哥,好帅是个大帅,哥哥";
            HashMap<Character, Integer> hashMap = new HashMap<>();
            while(string.length()>0) {
                Character c = string.charAt(0);
                string = string.substring(1);
                Integer integer = hashMap.get(c);
                if(integer == null ) {
                    hashMap.put(c, 1);
                }else {
                    hashMap.put(c, integer + 1);
                }
            }
            Set<Entry<Character, Integer>> entrySet = hashMap.entrySet();
            for (Entry<Character, Integer> entry : entrySet) {
                System.out.println(entry);
            }
    }

结果:


 

哥=3
    帅=2
    大=1
    个=1
    ,=3
    中=1
    国=3
    好=1
    是=1

**练习:找出数组中的一个值,使其左侧值的和等于右侧值的加和,例如:1,2,5,3,2,4,2,结果为第四个值。**

 

public static void main(String[] args) {
            int[] arr = new int[] {1,2,5,3,2,4,2};//1,2,5,3,2,4,2,9,2,1,7,6,3
            int targetIndex=0;
            for (int i = 0; i < arr.length; i++) {
                int leftSum=0;
                int rightSum=0;
                for (int j = 0; j < targetIndex; j++) {
                    leftSum += arr[j];
                }
                for (int j = targetIndex+1; j < arr.length; j++) {
                    rightSum+=arr[j];
                }
                if(leftSum == rightSum) {
                    break;
                }
                targetIndex++;
            }
            if(targetIndex == arr.length) {
                System.out.println("未找到这样的数值");
            }else {
                System.out.println("目标下标:" + targetIndex + "对应的值:" + arr[targetIndex]);
            }
    }


/

结果为:目标下标:3对应的值:3


**练习:**

请编写一个 Application

实现如下功能:从控制台给出的一个字母串,然后判断该串的第一个字母是否为大写,若是大写则统计该串中大写字母的个数,并将所有大写字母输出;否则输出信息串”第一个字母不是大写字母!”。


///

Scanner scanner = new Scanner(System.in);
    System.out.println("请输入一个字符串:");
    String string = scanner.next();
    char first = string.charAt(0);
    int intf = (int)first;
    System.out.println("第一个字母大小为:" + intf);
    if(intf >= 65 && intf <= 90) {
        int count = 0;
        for (int i = 0; i < string.length(); i++) {
            char charAt = string.charAt(i);
            int intChar = (int)charAt;
            if(intChar >= 65 && intChar <= 90) {
                count++;
                System.out.print(charAt + " ");
            }
        }
        System.out.println(count);
    }else {
        System.out.println("第一个字母不是大写字母!");
    }

运行结果:

请输入一个字符串:


   ABCabcdBC

   第一个字母大小为:65

   A B C B C 5


**练习:**

一个应用程序,接受用户输入的一行字符串,统计字符个数,然后反序输出。        
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入字符串:");
    String string = scanner.next();
    String back;
    int index= string.length() - 1;//4-1=3
    char[] charArray = new char[index + 1];
    for (int i = 0; i < string.length(); i++) {
        char charAt = string.charAt(i);
        charArray[index - i] = charAt;
    }             //3  0123
    String string2 = new String(charArray);
    System.out.println("字符个数为:" + string.length() + "," + string2);

运行结果:


   请输入字符串:

   sddfgghhj

   字符个数为:9,jhhggfdds

 

**练习:**

实现这两个字符串的拼接


//

Scanner scanner = new Scanner(System.in);
    System.out.println("请输入字符串:");
    String next1 = scanner.next();
    System.out.println("请输入再次输入字符串:");
    String next2 = scanner.next();
    String concat = next1.concat(next2);
    System.out.println(concat);

运行结果:


   请输入字符串:

   fdsaf

   请输入再次输入字符串:

   dsfaaf

   fdsafdsfaaf


**练习:写一个冒泡排序**

排序思想:

相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。


简单来说:

拿从小到大排序:拿二个数来比大小,大的数拿出来,继续跟后面的数比较大小,继续拿大的数出来这样循环,最后一个数反正是最大的。下一次循环操作类似。


案例:

int[] array = {11,5,9,7,3,2};

最开始数组:11 5 9 7 3 2

11比5大,拿11:5  11 9 7 3 2

11比9大,拿11:5 9 11 7 3 2

11比7大,拿11:5 9 7 11 3 2

...

比完第一轮后:

5 9 7 3 2 11

代码参考:


int[] array = {11,5,9,7,3,2};
    for (int i = 1; i < array.length; i++) {
        if(array[i-1] > array[i]) {
            int temp;
            temp = array[i-1];
            array[i-1] = array[i];
            array[i] = temp;
        }
    }
    for (int i = 0; i < array.length; i++) {
        System.out.print(array[i] + " ");
    }

已经确定11为最大的数,就不拿11继续比较了

现在要比较的数组:5 9 7 3 2

和第一轮一样

拿5和9比,9大,拿9:5 9 7 3 2

拿9和7比,9大,拿9:5 7 9 3 2

...

第二轮比较:5,7,3,2,9

第三轮比较:5,3,2,7

第四轮比较:3,2,5

...

我们可以发现比较的数的形状有点像:

。。。。。。

。。。。。

。。。。

。。。

。。

实现代码:

int[] array = {11,5,9,7,3,2};
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array.length - i; j++) {                
            System.out.print("。");
        }
        System.out.println();
    }

 

发现内外循环可以使用上面的操作了,我们可以继续对俩个数进行换位置操作。之前我们学过二个数换位置,所以附上代码:


   if(小的数变量 > 大的数变量) {

       int 临时变量;

       临时变量= 小的数变量;

       小的数变量 = 大的数变量;

       大的数变量= 临时变量;

   }


放到数组中

if(array[j-1] > array[j]) {
        int temp;
        temp = array[j-1];
        array[j-1] = array[j];
        array[j] = temp;
    }

最终代码:


int[] array = {11,5,9,7,3,2};
    for (int i = 1; i <= array.length; i++) {
        for (int j = 1; j <= array.length - i; j++) {
            if(array[j-1] > array[j]) {
                int temp;
                temp = array[j-1];
                array[j-1] = array[j];
                array[j] = temp;
            }
        }
    }
    for (int i = 0; i < array.length; i++) {
        System.out.print(array[i]);
    }

好了冒泡排序完成


相关文章
|
6月前
|
Java
【Java每日一题】— —第二十一题:编程把现实生活的手机事物映射成一个标准类Phone,并定义一个测试类PhoneDemo测试Phone类的功能
【Java每日一题】— —第二十一题:编程把现实生活的手机事物映射成一个标准类Phone,并定义一个测试类PhoneDemo测试Phone类的功能
|
6月前
|
前端开发 Java 测试技术
JavaSE碎碎念:记录一次异常测试和一些个人的浅显理解
JavaSE碎碎念:记录一次异常测试和一些个人的浅显理解
|
6月前
|
存储 测试技术
LabVIEW编程开发PCB自动测试设备
LabVIEW编程开发PCB自动测试设备
51 1
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
45 2
|
1月前
|
安全 网络安全 数据安全/隐私保护
Python渗透测试之流量分析:流量嗅探工具编程
Python渗透测试之流量分析:流量嗅探工具编程
|
3月前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
62 2
|
3月前
|
存储 测试技术 数据库
Python接口自动化测试框架(练习篇)-- 函数编程(一)
本文通过实际的编程练习,讲解了面向过程编程的概念和应用,包括如何定义函数、处理文件读写以及实现用户注册功能,最终将这些过程封装成函数,体现了Python作为脚本语言的面向过程编程特性。
28 2
|
3月前
|
测试技术 Python
Python接口自动化测试框架(练习篇)-- 函数编程(二)
本文通过具体的编程练习,深入探讨了Python中的函数编程,包括如何定义函数、使用参数和返回值,以及函数式编程的技巧和应用,如使用lambda表达式和递归函数解决实际问题。
27 1
|
4月前
|
Java 数据库 Spring
Java编程问题之在测试中使用CGLIB创建代理类如何解决
Java编程问题之在测试中使用CGLIB创建代理类如何解决
|
5月前
|
算法 Linux 测试技术
Linux编程:测试-高效内存复制与随机数生成的性能
该文探讨了软件工程中的性能优化,重点关注内存复制和随机数生成。文章通过测试指出,`g_memmove`在内存复制中表现出显著优势,比简单for循环快约32倍。在随机数生成方面,`GRand`库在1000万次循环中的效率超过传统`rand()`。文中提供了测试代码和Makefile,建议在性能关键场景中使用`memcpy`、`g_memmove`以及高效的随机数生成库。