JavaSE编码试题强化练习5

1.不使用函数实现字符串的翻转
/**
 * 1.不使用函数实现字符串的翻转
 */
public class TestStringReverse {
  public static void main(String[] args) {
    String s1 = "FEDCBA";
    System.out.println("翻转前:"+s1);
    /**
     * 此处需注意用s1接收方法的返回值,不然输出的还是没翻转之前的s1
     */
    s1 = reverseI(s1);
    System.out.println("方法I翻转后:"+s1);
    s1 = reverseII(reverseII(s1));
    System.out.println("方法II翻转后:"+s1);
  }

  /**
   * 方法I
   */
  public static String reverseI(String str){
    /**
     * 实现思路:将字符串存入一个字符数组中,首尾交换,每交换一次起始位置+1,结束位置-1
     * 调用toCharArray()方法,返回一个字符数组,方便通过下标取放字符,最终实现字符串的翻转
     */
    char[] ch = str.toCharArray();
    /**
     * 定义起始和结束位置下标索引号
     */
    int start = 0;
    int end = ch.length - 1;
    char temp;
    while (start < end){
      temp = ch[start];
      ch[start] = ch[end];
      ch[end] = temp;
      start++;
      end--;
    }
    /**
     * public String(char value[]) 此方法实现传入一个字符数组,返回一个字符串
     */
    String str0 = new String(ch);
    return str0;
  }

  /**
   * 方法II
   */
  public static String reverseII(String str){
    /**
     * 调用toCharArray()方法,返回一个字符数组,方便通过下标取放字符,最终实现字符串的翻转
     */
    char[] ch = str.toCharArray();
    /**
     * 定义一个空字符串
     */
    String str0 = "";
    for (int i = 0; i < ch.length; i++) {
      /**
       * 此法 str0 = temp + str0 中temp和str0的顺序是不能调换的,这是关键
       */
      char temp = ch[i];
      str0 = temp + str0;
    }
    return str0;
  }
}

运行结果:

2.给定一个字符串,如"yekmaakkccekymbvb",求字符串中有多少种字符以及每个字符的个数;把结果写入E盘名为TestIOStream.txt的文本文件中;读出刚才写入TestIOStream.txt文本文件的内容。

public class TestIOStream {
  public static void main(String[] args) {
    String str = "yekmaakkccekymbvb";
    Map<String,Integer> map = count(str);
    write(map);
    read();
  }
  /**
   * 求字符串中有多少种字符及每个字符的个数
   */
  public static Map<String,Integer> count(String s){
    Map<String,Integer> map = new LinkedHashMap<String,Integer>();
    for (int i = 0;i < s.length();i++){
      /**
       * public String substring(int beginIndex, int endIndex) 截取字符串中的子串
       * (前闭后开)
       * substring(i,i + 1)每次截取一个字符
       * 定义一个key接收返回的子串
       */
      String key = s.substring(i,i + 1);
      /**
       * 定一个整型value接收map.get(key)返回的值
       */
      Integer value = map.get(key);
      /**
       * 判断value若为空,即
       */
      if (value == null){
        map.put(key,1);
      }else {
        map.put(key,value+1);
      }
    }
    return map;
  }
  /**
   * 把结果写入E盘名为TestIOStream.txt的文件夹中
   */
  public static void write(Map<String,Integer> map){
    PrintWriter pw = null;
    try {
      pw = new PrintWriter("e:/TestIOStream.txt");
      pw.println("size:"+map.size());
      Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
      for (Map.Entry entry : entrySet){
        pw.println(entry.getKey()+":"+entry.getValue());
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }finally {
      pw.close();
    }
  }
  /**
   * 读出刚才写入的文本文件的内容
   */
  public static void read(){
    BufferedReader br = null;
    try {
      br = new BufferedReader(new FileReader("e:/TestIOStream.txt"));
      String str = null;
      do {
        str = br.readLine();
        System.out.println(str);
      }while (str != null);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
      try {
        br.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

运行结果:

3.使用冒泡排序对一个int数组进行排序。

public class TestBubbleSort {
  public static void main(String[] args) {
    int [] arr = {9,7,6,4,3,1,0};
    //int [] arr = {1,2,3,4,5,6,7};
    System.out.println("排序前:"+Arrays.toString(arr));
    bubbleSort(arr);
    System.out.println("排序后:"+Arrays.toString(arr));
  }
  public static void bubbleSort(int [] arr){
    for (int i = 0;i < arr.length - 1;i++){
      boolean flag = false;
      for (int j = 0;j < arr.length - 1 - i;j++){
        if (arr[j] > arr[j + 1]){
          int temp = arr[j + 1];
          arr[j + 1] = arr[j];
          arr[j] = temp;
          flag = true;
        }
      }
      if (!flag){
        break;
      }
    }
  }
}

运行结果:

原文地址:https://www.cnblogs.com/sinoaccer/p/11964306.html

时间: 2024-10-11 11:37:21

JavaSE编码试题强化练习5的相关文章

JavaSE编码试题强化练习2

1.编写递归算法程序:一列数的规则如下: 0.1.1.2.3.5.8.13.21.34...... 求数列的第40位数是多少. public class TestRecursion { public static void main(String[] args) { /** * 调用fibo方法并输出结果 */ int n = 40; TestRecursion tr = new TestRecursion(); System.out.println(tr.fibo(n)); } /** * 定

JavaSE编码试题强化练习4

1.编写一个Worker类,为Worker类添加相应的代码,使得Worker对象能正确放入TreeSet中.并编写相应的测试代码. /** * Worker类 */ public class Worker implements Comparable<Worker>{ /** * 私有属性 */ private String name; private int age; private double salary; /** * 构造方法 */ public Worker() { } public

JavaSE编码试题强化练习6

1.写出选择排序的代码实现,对一个int数组进行排序 public class TestSelectSort { public static void main(String[] args) { int [] arr = {87,65,5,5,43,21}; System.out.print("排序前:[ "); for (int i : arr){ System.out.print(i+" "); } System.out.println("]"

字符集与字符编码的强化理解与操作实践

字符集与字符编码的强化理解与操作实践 踩坑 最近在工作中遇到了一个说大不大说小不小的问题,就是当我解析一个xml文件的时候,抛出了一个"Invalid byte 2 of 2-byte UTF-8 sequence"的异常,这个异常会导致解析直接退出,显然不能容忍.查阅相关资料稍微定位了一下,大概知道是字符集的问题,仔细一看,xml文件中的确有中文字符,而且当我把这些中文字符删了之后的确又能解析成功.不过我还是不能理解这当中的缘由,不过由于时间原因,当时只是把中文字符删了就草草完工.现

JavaSE 面试题: 方法的参数传递机制

JavaSE 面试题 方法的参数传递机制 import java.util.Arrays; public class Test { public static void main(String[] args) { int i = 1; String str = "hello"; Integer num = 200; int[] arr = {1, 2, 3, 4, 5}; MyData my = new MyData(); change(i, str, num, arr, my); S

JavaSE 笔试题: 自增变量

JavaSE 笔试题 自增变量 public class Test { public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println("i=" + i); System.out.println("j=" + j); System.out.println("k=" + k); }

javaSE面试题总结

目 录 第一章 初识Java 1 1. Java跨平台原理(字节码文件.虚拟机) 1 2. Java的安全性 1 3. Java三大版本 2 4. Java开发运行过程 2 5. Java开发环境配置 2 6. 什么是JVM?什么是JDK? 什么是JRE? 2 7. Java三种注释类型 3 第二章 数据类型和运算符 4 1. 8种基本数据类型及其字节数 4 2. i++和++i的异同之处 4 3. &和&&的区别和联系,|和||的区别和联系 5 4. 用最有效率的方法算出2乘以8

JAVASE面试题

1.抽象类和接口的区别 抽象类重在对象的本质,接口则是对象的附加行为 抽象类是按需实现 ,接口必须全部实现 一个类只能继承一个抽象类 ,但是能多实现接口 抽象类中能定义普通的方法 ,接口中不能定义普通的方法 应用的场景 : 抽象类: 在设计类时,如果有些方法我们能确定,而有些方法不能确定,这时候我们就可以把该类声明成抽象类 接口: 我们在定义相互调用规则时,可以使用接口.面向接口进行编程的明显好处,就是能极大降低软件系统的相互耦合性,接口的定义者按照接口进行调用,而实现者去实现接口 2.list

C++强化学习规划表

第一阶段 C语言加强以及C++语言详解(29天) 课程名称 课程内容 学习目标 C语言强化 · C语言基础复习(数据类型.变量.内存布局.指针基础) · C语言基础强化提高(C语言中的字符串.一维数组.二维数组) · C语言基础强化提高(一级指针,二级指针,三级指针实战,N级指针概念,指针数组和数组指针) · C语言基础强化提高(结构体.文件的使用) · 动态库的封装和设计 · 函数指针回调函数 · C语言面试题强化与提高 在基础班C语言知识点之上,掌握C语言深入技巧,为日后 做更大的项目打下坚