我的java日记(基础下)


今天又学到了很多东西,把以前一直不太明白的选择排序,冒泡排序和折半查找搞明白了,心中不由的产生一股动力, 因为在这个社会没有一技之长是无法立足的.所以我一定进入黑马学习. 只有学到了真正的东西,才能在社会上站稳脚跟.

一:Scanner类:从键盘上输出
   System.in:标准输入流
 例:
import java.util.Scanner;   //导包
class  ScannerTest
{
 public static void main(String[] args)
 {    //创建一个对象,指定从键盘输入
  Scanner sr=new Scanner(System.in);
  int num=sr.nextInt();//获取一个整型数据
  System.out.println("num="+num);
  Scanner sc=new Scanner(System.in);
  String str=sc.nextLine();
  System.out.println("输入的内容是:"+str);
 }
}


/*
通过Scanner对象获取数据注意:
如果先输入整数,再输入字符串则必须要再次实例化一个Scanner对象.
*/

二:数据的校验:
       1:正确数据
       2:边界数据
       3:错误数据

三:选择排序
 让0角标处的元素和其他的元素进行比较,第一次比较完后,最小值出现在了0角标位置.
 再让1角标处的元素和其后元素进行比较,比较完后,此小值出现在了1角标位置.
 依次类推,即可得到一个从小到大排序的数组.
例:class SelectDemo
{
 public static void main(String[] args)
 {
  int[] arr={12,23,45,223,4,2,452};
  System.out.println("排序前:");
  print(arr);
  selectsort(arr);
  System.out.println("\n排序后:");
  print(arr);
 }
 public static void selectsort(int[] a){
  int temp=0;
  //外循环控制比较次数
  for(int x=0;x<a.length-1;x++){
   //内循环控制元素的比较.
   //y=0,但是重复,所以y从1开始
   //下一次,x从1开始,那么,这时候又重复了.
   //经过观察,发现规律:y永远比x大1,所以最终确定y=x+1;
   for(int y=(x+1);y<a.length;y++){
    //数据比较
    if(a[x]>a[y]){
     //交换数据
     temp=a[x];
     a[x]=a[y];
     a[y]=temp;
    }
   }
  }
 }
 public static void print(int[] a){ //打印输出
  for(int i=0;i<a.length;i++){
    System.out.print(a[i]+"  ");
   }
 }
}

四:冒泡排序
相邻的元素两两比较,第一次比较完后,较大值出现在较大角标索引位置.
依次类推,就得到了一个从小到大排序的数组.
例:
class BubbleDemo
{
 public static void main(String[] args)
 {
  int[] arr={12,23,45,223,4,2,452};
  System.out.println("排序前:");
  print(arr);
  bubblesort(arr);
  System.out.println("\n排序后:");
  print(arr);
 }
 public static void bubblesort(int[] a){
  for(int x=0;x<a.length-1;x++){  //外循环控制比较次数
   for(int y=0;y<a.length-1-x;y++){  //length-1是为了防止y+1越界
    if(a[y]>a[y+1]){//数据的比较
     int temp=a[y];//交换数据
     a[y]=a[y+1];
     a[y+1]=temp;
    }
   }
  }
 }
 public static void print(int[] a){ //打印输出
  for(int i=0;i<a.length;i++){
    System.out.print(a[i]+"  ");
   }
 }
}
五:Arrays.sort();

五:查找数据:

  1:普通查找:
例;
//查找某个元素在数组中的角标
/*思路:就是遍历这个数组,然后把6和这个数组中的的元素进行比较,如果有满足条件的元素,就把其索引返回即可.
  1:6在数组中存在.
     返回第一个6的索引位置

  2:6在数组中不存在
     返回-1
*/
class SearchArray1
{
 public static void main(String[] args)
 {
  int arr[]={1,2,3,4,6,7};
  System.out.println("6的位置:"+search(arr,6));
 }
 public static int search(int[] arr,int value){
  int temp=-1;
  for(int i=0;i<arr.length;i++){
   if (arr[i]==value)
   {
    temp=i;
   }
  }
  return temp;
 }
}

//此中方法的查找效率很低.一般用于无序数组

.
2:折半查找(二分查找):
    前提:数组必须有序.
    注意:不能先对数组排序,再进行二分查找.
   例:
/*
折半查找:必须要求数组有序.
我们可以定义三个变量,用于保存数组的头索引,中间索引,尾索引.
int min=0;
int max=arr.length-1;
int middle=(min+max)/2;
int value     //要查找的值
如果value<middle,则在左半边找,max=middle-1,middle=(max+min)/2;
如果value>middle,max=middle+1,middle=(max+min)/2则在右半边查找.
依次类推就可以找到value值,
如果value值不存在则返回-1.
*/
class ZhebanSearch   //
{
 public static void main(String[] args)
 {
  int[] arr={12,23,32,45,56,67,78};
  
  System.out.println("要查找的内容是arr["+search(arr,56)+"]");
 }
 public static int search(int[] arr,int value){
  int min=0;
  int max=arr.length-1;
  int middle=(max-min)/2;
  while (arr[middle]!=value)
  {
   if(value>arr[middle]){
    min=middle+1;
   }else if(value<arr[middle]){
    max=middle-1;
   }
   if (min>max)
   {
    return -1;//如果小的索引比大的索引还大,那么,数据不存在。所以返回-1.
   }
   middle=(max+min)/2;
  }
  return middle;
 }
}


六:二维数组:数组中的数组,一维数组中的每一个元素又是一个一维数组.

 格式1:
    int[][] arr=new int[3][2];表示有三个一维数组,每个一维数组中又有2个元素.
  
 格式2:
    int[][] arr=new int[3][2];表示此二维数组中有三个一维数组,每个一维数组都是默认初始化值null,
    可以对这三个一维数组分别进行初始化.
    arr[0]=new int[1];
    arr[1]=new int[2];
    arr[2]=new int[3];
 格式3:
    int[][] arr={{1,2,4},{23,2},{7,45,6,3}};
    arr[0][2]={1,2,4};
    arr[1][]={23,2};
    arr[2][]={7,45,6,6};
  for(int i=0;i<arr.length;i++){
 for(int j=0;j<arr[i].length;i++){
  System.out.println(a[i][j]);
 }
  }

 

 

 

 

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值