关于JAVA程序中查找数组索引以及生成随机验证码的问题。

       首先我们知道,索引是访问一个数组中元素的一个重要的数据,倘若我们不知道这个索引,就无法对数组中的元素进行访问,更无法进行使用。因此,面对未知的数组,我们应该学会如何查找索引。

       现在我们有一个未知的数组。如下

int [] arr = {11,22,33,44,55};

       如果我们只知道这个数组中含有33这个元素,但是并不知道它的索引未知,这时候我就需要去进行索引的查询。

          对于这个问题我们已经知道这个数组中存在一个元素33,但是我也不知道这个数组的长度,以及33这个元素对应的索引位置,因此我可以这样设计一个程序。


int sum = -1;
for(int a = 0;a<arr.length;a++){
if(arr[i]!=33){
 sum++;


}else if(arr[i]==3){
     sum++;
    break;

}
System.out.prinln(sum);


}

       对于上述的程序,首先定义了一个变量sum,sum起始值为-1,它的作用是用来记录索引为的位置,如果我们想要得到这个索引,我还应该进行,比较数组中的每一个元素与对应查找的元素进行比较,同时利用++算法对sum这个计数器进行增加。最后控制台中打印的结果就是对应的索引。

       通过上述方法,我们可能都会发现一个问题,如果我要查找的那个元素在这个数组中含有重复多个呢?是的,对于这个问题我们应该更换一个新的方法进行操作。

      由于数组中含有重复元素,这句话的含义应当为,该元素对应的索引存在多个,而对于我们要储存多个同种类型的元素,我们可以采用数组这一个容器进行储存。原始方法还和上述方法相同

思路还是选择一个计数器,然后根据if条件对其进行++计数器。

首先定义了一个数组arr,然后接着再需要定义一个计数器,然后根据if判断条件,可以表述如下

首先得到sum,sum即为该这个数组中该元素的个数,同时也是用来接收索引的数组的长度。

之后再次定义一个索引,然后通过一个计数器把索引存储在数组中。

通过上述两部程序即可完成重复元素的索引查找。

二.双指针交换:

        双指针交换是指,由两个指针指向数组中的任意2索引元素,然后然他们向同中间靠拢,指中谁谁就交换。首先根据这个需求我们可以知道,我们需要将指向的的两个索引位置进行比较,首先第一个指针初始位置应当小于第二个指针。同时这两个指针要求分布在数组中心的两侧(题目规定),因此我们可以定义一个变量一个在中间的左边,一个在中间的右边,但同时右边的指针不能够超过最大索引。因此我们可以写下下面的判断

指针的范围确定了我们应让他们进行运转并进行交换,首先促使两个指针向中间靠拢,首先我们可以想到让左边的进行自增,右边的进行自减如下

接者我们不能使这两个指针越界,因此需要满足end>start这个条件

对于如何交换,我们可以设置第三个量

首先这个量记录初始值arr[start],随后arr[start]= arr[end];右边给左边赋值。

最后左边等于最开始设置的第三值,这样我们就完成了双指针交换,全部程序如下图所示!

import java.util.Scanner;
public class ArrTrainsport2 {
    public static void main(String []args){
        for (;;) {
            int[] arr = {11, 22, 33, 44, 55, 66, 77, 88, 99, 100};
            int[] result = find(arr);
            for (int i = 0; i < result.length; i++) {
                System.out.println(result[i]);

            }
        }
    }
    public static int[] find(int [] arr){
        Scanner tll = new Scanner(System.in);
        int start = tll.nextInt();
        int end = tll.nextInt();
        if(start<arr.length/2&&end>arr.length/2&&end<arr.length){
            for(int i = 0;i<arr.length;i++){
                int temp= arr[start];
                arr[start] = arr[end];
                arr[end]=temp;
                start++;
                end--;
                 temp= arr[start];
                if(start>end){
                    break;

                }
            }
        }else{
            System.out.println("false");
        }
        return arr;


    }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值