JAVA学习第四天

1、数组(静态初始化--常见问题)

public class test1{
public static void main(String[] args){
    int[] arr=new int[3];

arr=null;
    System.out.print(arr[1]);
}

}此时程序会报错:nullpointerexception:空指针异常,此时arr指针已经不只指向数组了。

//ArrayIndexOutOfBoundsException 操作数组时候,访问了数组中不存在的角标。

//nullpointerexception空指针异常:当引用没有任何指向值为null的情况,该引用还存在于操作实体。

2、数组的遍历(获取数组中的元素):

public class test1{
public static void main(String[] args){
    int[] arr={3,1,2,5,4,6};
    for(int i=0;i<arr.length;i++){
        System.out.println("arr["+i+"]="+arr[i]);
    }
   }

}

//输出的结果为:

arr[0]=3
arr[1]=1
arr[2]=2
arr[3]=5
arr[4]=4
arr[5]=6

========================================================================================

3、定义一个函数输出数组元素并且用逗号隔开:

public class test1{
public static void main(String[] args){
    int[] arr={1,2,3,4,5,6,7,8,9};
    printArray(arr);
}
    public static void printArray(int[] arr){
        for(int x=0;x<arr.length;x++){
            if(x!=arr.length-1)
                System.out.print(arr[x]+",");
            else
                System.out.print(arr[x]);
        }
    }
    }

输出结果:1,2,3,4,5,6,7,8,9

===========================================================================================

4、获取数组中的最大值:思路如下

代码如下:

public class test1{
    public static int getMax(int[] arr){
        int max=arr[0];
        for(int x=1;x<arr.length;x++){
            if(arr[x]>max)
                max=arr[x];
            
        }
        return max;
        }
    
public static void main(String[] arg){
    int[] arr={12,2,3,6,5,8,9,88,99,100};
    int max=getMax(arr);
    System.out.print("max="+max);
}
    }

输出结果为100:

方法二(max初始化为0时候)代码如下--以数组角标存在:

public class test1{
    public static int getMax(int[] arr){
        int max=0;
        for(int x=1;x<arr.length;x++){
            if(arr[x]>arr[max])
                max=x;
            
        }
        return arr[max];
        }
    
public static void main(String[] arg){
    int[] arr={12,2,3,6,5,8,9,88,99,100};
    int max=getMax(arr);
    System.out.print("max="+max);
}
    }

===========================================================================================

5、数组的排序(选择排序以及冒泡排序):

代码如下:

public class test1{
    public  static void selectSort(int[] arr){
        for(int x=0;x<arr.length-1;x++){               //最后一个数不要比较
            for(int y=x+1;y<arr.length;y++){
                if(arr[x]>arr[y]){
                    int temp=arr[x];
                    arr[x]=arr[y];
                    arr[y]=temp;
                }
            }
        }
        
    }
    public static void main(String[] args){
        int[] arr={5,6,4,3,2,1,9,8,7};
        printArray(arr);
        selectSort(arr);
        printArray(arr);
    }
    public static void printArray(int[] arr){
        System.out.print("[");
        for(int x=0;x<arr.length;x++){
            if(x!=arr.length-1)
                System.out.print(arr[x]+", ");
            else
                System.out.print(arr[x]+"]");
        }
    }
    }

输出结果如下:

[5, 6, 4, 3, 2, 1, 9, 8, 7]  [1, 2, 3, 4, 5, 6, 7, 8, 9]

冒泡排序(相邻两个元素进行比较如果符合就换位):

代码如下:

public  static void maopao(int[] arr){
        for(int x=0;x<arr.length-1;x++){
            for(int y=0;y<arr.length-x-1;y++)
            {
                if(arr[y]<arr[y+1]){
                    int temp=arr[y];
                    arr[y]=arr[y+1];
                    arr[y+1]=temp;
                }
                }
    }

=============================================================================

综合以上选择排序以及冒泡排序都有一个共同特点就是要替换满足条件的两个数组位置的值:

public static void swap(int[] arr,int a,int b){

int temp=arr[a];

arr[a]=arr[b];

arr[b]=temp;

}

只要调用这个函数就OK了:

###Arrays.sort(arr); //java中已经定义好的一种排序方式,开发中对数组排序需要使用该句代码.####

===========================================================================================

6、数组的查找(折半查找):

查找一个数组中元素所在的序列中的序号,代码如下:

public class test1{
    public static int getIndex(int[] arr,int key){
        for(int x=0;x<arr.length;x++){
            if(arr[x]==key)
                return x;
        }
        return -1;
    }
    public static void main(String[] args){
        int[] arr={2,5,6,9,8,7,9};
        int index=getIndex(arr,5);
        System.out.print("index="+index);
    }
            }
 以上是按照顺序往下找,为了提高效率直接运用折半查找,代码如下:

public class test1{
    public static int getIndex(int[] arr,int key){
        for(int x=0;x<arr.length;x++){
            if(arr[x]==key)
                return x;
        }
        return -1;
    }
    public static int halfSearch(int[] arr,int key){
        int min,mid,max;
        min=0;
        max=arr.length-1;
        mid=(max+min)/2;
        while(arr[mid]!=key){
        if(key>arr[mid])
             min=mid+1;
        else if(key<arr[mid])
             max=mid-1;    
         if(min>max)
             return -1;
            mid=(max+min)/2;        
        }
        return mid;
    }
    public static void main(String[] args){
        int[] arr={2,5,6,7,8,9};
        int index=halfSearch(arr,7);
        System.out.print("index="+index);
    }
            }

时间: 2024-10-17 18:05:37

JAVA学习第四天的相关文章

从.Net到Java学习第四篇——spring boot+redis

从.Net到Java学习第一篇——开篇 从.Net到Java学习第二篇——IDEA and start spring boot 从.Net到Java学习第三篇——spring boot+mybatis+mysql 接上一篇,本篇使用到的框架redis.FastJSON. 环境准备 安装redis,下图是我本机的redis绿色版,你可以网上自行下载安装,如果不知道如何怎么操作,可以移步到我的另一篇文章:ASP.NET Redis 开发 以管理员身份打开CMD窗口: C:\Users\zouqj>e

Java学习笔记四(代码块 )

1 代码块的分类:java中的代码块是指使用{}括起来的一段代码,根据位置不同可以分为四种: 普通代码块 构造快 静态代码块 同步代码块 今天主要学习前三种代码块,同步代码块在学习到多线程部分的时候再加学习. 2 普通代码块:直接定义在方法中的代码块,如下: public class CodeSpace { public static void main(String args[]){ { int x = 30; System.out.println("普通代码块x="+x); } /

JAVA学习第四十七课 — IO流(一):文件的读写

输入流和输出流相对于内存 将外部设备的数据读取到内存中:输入 将内存中的数据写入外部设备中:输出 IO流常用基类 字节流的抽象基类:InputStream,OutputStream 字符的抽象基类:Reader,Writer PS:由这四个流派生出的子类都是以父类名作为后缀名 如:InputStream的派生类FileInputStream,Reader的派生类FileReader PS:如果是文字形式的数据应该优先考虑字符流,且将数据从内存写到硬盘上应该是Writer FileWriter类

java学习 第四天 数组

数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素. §5.1一维数组 一.一维数组的定义 type arrayName[]; 其中类型(type)可以为Java中任意的数据类型,包括简单类型组合类型,数组名arrayName为一个合法的标识符,[]指明该变量是一个数组类型变量.例如: int intArray[]; 声明了一个整型数组,数组中的每个元素为整型数据.与C.C++不同,Java在数组的定义中并不为数组元素分配内存,因此[]中不用指出数组中元素个数,

java学习笔记四:static的几个角落及小谈多态

最近有点事情,没有及时更新笔记,学习不可弃,总结一下最近的学习,其中重点是static的一些应用,多态是一种设计理念,了解较容易,想如火纯清的确不是一件容易的事情. 对于static,主要有两点是我所学习的. 1.首先简单的介绍一下static的定义.static是静态的意思,就是说这个类变量或者类方法不需要实例化就可以使用.使用static的变量是类变量,也成为静态域(static field).这些是static的基本语义,了解了这些,继续向下看. java核心技术(卷一)对于静态有这样一段

JAVA学习第四十二课 — 泛型(二)—泛型接口&amp;&amp;通配符应用

一.泛型接口 interface Inter<T>{ public void show(T t); } class InterImple implements Inter<String>{//知道是字符串类型 public void show(String str){ System.out.println("show "+str); } } class InterImple_2<Q> implements Inter<Q>{//不知道是什

JAVA学习笔记(四十七)- 事件监听

定义ActionListener接口的实现类实现事件监听 import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; /* * 事件监听 */ public class Te

JAVA学习笔记(四十九)- Swing相关组件

JFrame组件 import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; /* * Swing是在AWT基础上的扩展 * javax.swing包及其扩展包,组件的命名多以J开关 * * JFrame组件 */ public class Test08 { public static void main(String[] args) { JFrame frame=new JFrame("我的窗体&qu

JAVA学习第四十九课 — IO流(三):缓冲区2 &amp; 装饰设计模式

一.模拟BufferedReader 自定义MyBuffereaReader 对于缓冲区而言,里面其实就是封装一个数组,对外提供方法对数组的操作,这些方法最终操作的都是数组的角标 原理:从源中取出数据存入缓冲区,再从缓冲区不断的取出数据,取完后,继续从源中继续取数据,进缓冲区,直至源中的数据取完,用-1做为结束标记 import java.io.*; class MyBufferedReader { private FileReader fr; //定义数组作为缓冲区 private char[

java学习(四)代码的设计

一.目的 1.为了使程序员编写的代码更加的简洁,使人阅读起来更加流畅 2.将运算代码与界面代码完全分离开来,利于团队开发,提高团队之间的工作效率 3. 在很短的时间内可以替换整个站点的外观: 4.使程序员可以抽象编程,而无须接触HTML代码: 5.可以重复利用以前的模板. 二.示例 引用前一篇的记忆曲线的JSP文件 1.未进行分离的代码 1 <%@ page language="java" contentType="text/html; charset=UTF-8&qu