数组小知识点


一:1.数组在内存中是连续存储的。
    2.>>>1向右移位(二进制编码)
    3.数组的复制
      int[] array={1,2,3,4};
      int[] t=new int[array.length];
      for(int i=0;i<t.length; i++){
        t[i]=array[i];
      }
      array[0]=111;//验证
      System.out.println(Arrays.toString(array));
     
      System.arrayCopy(array,0,t,0,array.length);
     
    4. ==和equals 的区别。
       当基本类型和基本类型相比较时,只的时值是否相等。引用类型相比较时,是指的看是否指向同一地址。
       在父类object 中,equals只是简单的地址比较。用的时候必须重写equals方法。
 
   
二:以下是些例子:
2,查找数组中的元素
   public class 查找数组元素 {

 public static void main(String[] args) {
  int[] array = {2,43,4,6,67,6,86,54,34,23,4234};
  int who = 865;
  
  boolean isFound = false;
  
  for (int i = 0; i < array.length; i++) {
   if (array[i] == who) {
    System.out.println("找到了,位置是" + (i + 1));
    isFound = true;
   }
  }
  if (!isFound) {
   System.out.println("没有!");
  }
 }
}
3.二分法查找

import java.util.Arrays;


public class 二分法查找 {

 public static void main(String[] args) {
  
  int[] array = {5,6,7,8,9,12,23,16,19,25,21,29,34,37,39,51};
  Arrays.sort(array);
  System.out.println(Arrays.toString(array));
  int number = 19;
  System.out.println(binarySearch(array, number));
  
 }
 
 public static int binarySearch(int[] array, int number) {
  int start = 0;
  int end = array.length - 1;
  while (start<=end) {
   int middle = (start + end) / 2;
   if (number == array[middle]) {
    return middle;
   } else if (number < array[middle]) {
    end = middle - 1;
   } else {
    start = middle + 1;
   }
  }
  return -1;
 }

}


4.冒泡排序法

import java.util.Arrays;


public class 冒泡法排序 {

 public static void main(String[] args) {
  
  //定义数组并使用随机数填充数组
  int[] array = new int[50];
  for (int i = 0; i < array.length; i++) {
   array[i] = (int) (Math.random() * 100);
  }

  //使用冒泡法从大到小排序
  for (int i = 0; i < array.length; i++) {
   for (int j = 0; j < array.length-i-1; j++) {
    if (array[j] < array[j+1]) {
     int tmp = array[j];
     array[j] = array[j+1];
     array[j+1] = tmp;
    }
   }
  }
  //使用交换法从大到小排序
  for (int i = 0; i < array.length; i++) {
   for (int j = i + 1; j < array.length; j++) {
    if (array[i] < array[j]) {
     int tmp = array[i];
     array[i] = array[j];
     array[j] = tmp;
    }
   }
  }
  
  System.out.println(Arrays.toString(array));

 }

}

5.数组倒序

import java.util.Arrays;

public class 数组倒序 {

 public static void main(String[] args) {
  
  int[] array = {1, 3, 5, 7, 9, 11, 13};
  for (int i = 0; i < array.length / 2; i++) {
   int j = array.length - i - 1;
   int tmp = array[i];
   array[i] = array[j];
   array[j] = tmp;
  }
  System.out.println(Arrays.toString(array));
  
 }

}


6.杨辉三角

import java.util.Arrays;

public class 杨辉三角形_I {

 public static void main(String[] args) {
  
  int[][] array = new int[10][10];
  //初始化第一行的内容
  array[0] = new int[]{1};
  
  for (int y = 1; y < 10; y++) {
   //为每一行分配内存空间
   array[y] = new int[y + 1];
   for (int x = 0; x < y + 1; x++) {
    //杨辉三角形的两边都是1
    if (x==0 || x==y) {
     array[y][x] = 1;
    } else {
     //其他位置等于上一层两肩数组的和
     array[y][x] = array[y - 1][x] + array[y - 1][x - 1];
    }
   }
  }
  
  //打印杨辉三角形
  for (int y = 0; y < 10; y++) {
   System.out.println(Arrays.toString(array[y]));
  }
  
  //完美打印杨辉三角形
  for (int y = 0; y < 10; y++) {
   for (int x = 0; x < 9 - y; x++) {
    System.out.print("   ");
   }
   for (int x = 0; x <= y; x++) {
    String output = "" + array[y][x];
    if (output.length()==1) output = " " + output + " ";
    if (output.length()==2) output = " " + output;
    System.out.print(output + "   ");
   }
   System.out.println();
  }
 }

}


public class 杨辉三角形_II {

 public static void main(String[] args) {
  
  int[] array = new int[10];
  int[] tmpArray = new int[10];
  array[0] = 1;
  System.out.println("1");
  for (int y = 1; y < 10; y++) {
   for (int x = 0; x < y + 1; x++) {
    if (x==0 || x==y) {
     tmpArray[x] = 1;
    } else {
     tmpArray[x] = array[x] + array[x - 1];
    }
    System.out.print(tmpArray[x] + " ");
   }
   System.out.println();
   System.arraycopy(tmpArray, 0, array, 0, 10);
  }
  
 }

}


7.填字游戏

import java.util.Random;
import java.util.Scanner;


public class 填字游戏 {

 public static void main(String[] args) {
  String[] poems = "白日依山尽,黄河入海流,欲穷千里目,更上一层楼".split(",");
  String rightWords = "";
  String[] answers = new String[4];
  
  int rightOption = (int)(Math.random()* 4);
  
  //挖去四个字
  for (int i = 0; i < 4; i++) {
   rightWords += poems[i].charAt((int)(Math.random()* 5));
  }
 
  answers[rightOption] = rightWords;
  //生成错误答案
  for (int i = 0; i < answers.length; i++) {
   if (i == rightOption) continue;
   int[] pos = {0,1,2,3};
   for (int j = 0; j < 10; j++) {
    int x = (int)(Math.random()* 4);
    int y = (int)(Math.random()* 4);
    int tmp = pos[x];
    pos[x] = pos[y];
    pos[y] = tmp;
   }
   //生成一个备选的错误答案
   String anAnswer = "" + rightWords.charAt(pos[0]) + rightWords.charAt(pos[1]) + rightWords.charAt(pos[2]) + rightWords.charAt(pos[3]);
   if (anAnswer.equals(rightWords)) {
    i--;
    continue;
   }
   //检测备选答案是否重复
   for (int j = 0; j < i; j++) {
    if (anAnswer.equals(answers[j])) {
     i--;
     continue;
    }
   }
   answers[i] = anAnswer;
  }
  
  //打印诗文
  for (int i = 0; i < poems.length; i++) {
   System.out.println(poems[i].replace(rightWords.charAt(i), '?'));
  }
  //打印选项
  for (int i = 0; i < answers.length; i++) {
   System.out.print((char)('A' + i) + ". ");
   System.out.print(answers[i].charAt(0) + ", ");
   System.out.print(answers[i].charAt(1) + ", ");
   System.out.print(answers[i].charAt(2) + ", ");
   System.out.println(answers[i].charAt(3));
  }
  System.out.println("请输入您的答案:");
  Scanner scanner = new Scanner(System.in);
  String userInput = scanner.next();
  int u = userInput.charAt(0) - 'A';
  if (u==rightOption) {
   System.out.println("恭喜您答对了!");
  } else {
   System.out.println("恭喜您答错了!");
   System.out.println("正确答案是"  + (char)('A' + rightOption));
  }
 }
}

8.StringBuffer的应用

public class StringBufferDemo {

 public static void main(String[] args) {
//  StringBuffer sb = new StringBuffer();
//  sb.append("a");
//  sb.append("b");
//  sb.append("c").append("d").append("e");
//  String s = sb.toString();
  
  long start = System.currentTimeMillis();
  StringBuffer sb = new StringBuffer(99999);
  for (int i = 0; i < 99999; i++) {
   sb.append("1");
  }
  System.out.println(sb.toString());
  long end = System.currentTimeMillis();
  System.out.println(end - start);
  
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值