java在数组里查找数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java在数组里查找数据相关的知识,希望对你有一定的参考价值。

这个是我写的。基本上明白,但是查找不到数据
if(i==num.length)
System.out.println();
System.out.println("抱歉,您要查找的数字"+nums+"不存在!");

那里不是很明白。为什么放在int i =0与for循环
for(;i<num.length;i++)
if(num[i]==nums)
之间就没任何提示。大家帮忙看看。还有就是如果输入的10个数字有重复的比如两个78,那应该有两个位置的,但是只显示了6这个位置,7位置没显示。应该怎么做。大家看我得图片。

代码如下:
package com.object.www;

import java.util.Scanner;

public class Text

/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
int temp=0;
int index=0;
Scanner input=new Scanner(System.in);
int num[]=new int[10];
System.out.println("请输入10个数:");
for(int i=0;i<num.length;i++)
num[i]=input.nextInt();

System.out.println("你输入的数字分别是:");
for(int i=0;i<num.length;i++)
System.out.print(num[i]+"\t");

System.out.println();
System.out.println("按升序方式排列之后的数据是:");
for(int i=0;i<num.length;i++)
for(int j=i+1;j<num.length;j++)
if(num[i]>num[j]) //按降序方式排列是if(num[i]<num[j])
temp=num[i];
num[i]=num[j];
num[j]=temp;



for(int i=0;i<num.length;i++)
System.out.print(num[i]+"\t");

System.out.println();
System.out.println("请输入你要查找的数字:");
int nums=input.nextInt();
int i=0;
for(;i<num.length;i++)
if(num[i]==nums)
index=i+1;
System.out.println("已经找到你要查找的数据:它的位置是:"+index);
break;


if(i==num.length)
System.out.println();
System.out.println("抱歉,您要查找的数字"+nums+"不存在!");



在你查找的输入数字那段程序中,你看下,直接就是查找到一个然后程序就跳出来了,此时最好的方法是在程序前面定义一个数组,因为你不确定有多少个你要查找的数,该数组用来存储对应查找的数位置,
你再查询那段程序改下,让其不要查找到一个就跳出,而是用一直查找到数组最后,程序我不给你写了,你先自己试试看看,不行的话,再帮你,毕竟自己实践是最好的!追问

你第一段话是什么意思啊?不懂。我试了好久,都没能弄出来,怎么才能查找到数组最后?你帮忙写一下。实在不知道才发到百度知道里来的。惭愧

追答

可以,这个没事的,大家都是一样的起步一样的过程,加油!

import java.util.Scanner;

public class Text

/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
int temp=0;
int index=0;
int[] weizhi = new int[10]; //这个用于记录查找到的位置,
int key = 0; //用于记录位置数组中的索引,也就是下标,为了输出方便

//

//中间删除一些代码,是你编写正确的
System.out.println("请输入你要查找的数字:");
int nums=input.nextInt();
int i=0;
for(;i<num.length;i++)
if(num[i]==nums)
index=i+1;
weizhi[key] = index; //记录位置值
key++;
//System.out.println("已经找到你要查找的数据:它的位置是:"+index);
//break;



if((i==num.length)&& (key ==0)) //当满足结束的时候,此时一个是位置数组中没有值,同时已经查询到数据数组最后,只有当两个条件同时满足的时候才可以说没有找到输入查询的数据
System.out.println();
System.out.println("抱歉,您要查找的数字"+nums+"不存在!");

else
System.out.println("已经找到你要查找的数据:它的位置是:");
for(i=0; i<key;i++) //这时候key的大小表示的就是一共找到几个数据,记录的就是位置
System.out.println("它的位置是:"+weizhi[i]);





你再想想,多多想想,然后做做,加油

追问

能告诉我你的QQ吗?

追答

1275259358

参考技术A 你只找到第一个就break了 当然只能显示一个位置
修改了一下你看看
/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
int temp=0;
int index=0;
Scanner input=new Scanner(System.in);
int num[]=new int[10];
System.out.println("请输入10个数:");
for(int i=0;i<num.length;i++)
num[i]=input.nextInt();

System.out.println("你输入的数字分别是:");
for(int i=0;i<num.length;i++)
System.out.print(num[i]+"\t");

System.out.println();
System.out.println("按升序方式排列之后的数据是:");
for(int i=0;i<num.length;i++)
for(int j=i+1;j<num.length;j++)
if(num[i]>num[j]) //按降序方式排列是if(num[i]<num[j])
temp=num[i];
num[i]=num[j];
num[j]=temp;



for(int i=0;i<num.length;i++)
System.out.print(num[i]+"\t");

System.out.println();
System.out.println("请输入你要查找的数字:");
int nums=input.nextInt();
StringBuffer sb=new StringBuffer("");
for(int i=0;i<num.length;i++)
if(num[i]==nums)
index=i+1;
//System.out.println("已经找到你要查找的数据:它的位置是:"+index);
//break;
sb.append(index+",");


if(sb.length()==0)
System.out.println();
System.out.println("抱歉,您要查找的数字"+nums+"不存在!");
else
System.out.println("已经找到你要查找的数据:它的位置是:"+sb.substring(0,sb.lastIndexOf(",")));

追问

sb.append(index ",");和sb.substring(0,sb.lastIndexOf(",")));是什么意思?完全看不懂。好像还没学到

追答

String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。

String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。
StringBuffer类的构造函数
public StringBuffer()
创建一个空的StringBuffer类的对象。
public StringBuffer( int length )
创建一个长度为 参数length 的StringBuffer类的对象。
注意:如果参数length小于0,将触发NegativeArraySizeException异常。
public StringBuffer( String str )
用一个已存在的字符串常量来创建StringBuffer类的对象。
sb.append()用来追加字符串,给它append上添加的字符串
sb.lastIndexOf(","),查找字符串中从最后一个“,”的位置
sb.substring(0,index);指从0的位置数起到index位置的前一位 用数学符号表示为[0,index)
所以sb.substring(0,sb.lastIndexOf(",")));的意思是截取sb字符串从0开始到sb中最后一个“,”前的字符串
数组使用来记录固定长度的数据,如果你的长度不固定的话 建议用其它的方式记录数据
而且你一旦申明了数组长度,那内存就会给它分配空间,如果用不到的话 就算是浪费了

参考技术B 是因为你在循环里用了break,找到一个之后就跳出循环了,去掉就不会了。循环的过程就是查找的过程,你拿你要找的数根数组里的对比,当然放循环里面。因为你在里面找了之后发现没有这个数,才提示没找到。你要是拿出来了,你都都找过,你怎么知道10个数里没有你要找的数字。 参考技术C 首先如果有重复的数字你只显示一个,是因为你找到一个后,就break了,退出循环了。

还有那个找不到的提示,不是很清楚了? 当i等于数组长度的时候,如果放在循环前面当然不可能相等的,除非你数组长度为0. 只有在循环结束后,且没有找到数字,也就没有break,循环跑完了,i也就一直加,就等于数组长度了,这样就说明没有找到。
参考技术D 将查找部分的的那个循环体中的break,换成continue,或者去掉,

然后再加一个表示符,来显示打印,

boolean flag = false;
for (; i < num.length; i++)

if (num[i] == nums)

index = i + 1;

flag = true;

System.out.println("已经找到你要查找的数据:它的位置是:" + index);





if (!flag)

System.out.println();

System.out.println("抱歉,您要查找的数字" + nums + "不存在!");



在一个已排序的数组里如何插入新数据项?

在一个已经排序的数组里,在合适的位置增加一个数据项,其他元素按顺序往后排。
如何写?语言:java.

#include<stdio.h>

int main()

int n=9;//数组元素个数
int a[10]=;

//开始两分查找
int i,j,mid,insert=5;
i=0; j=n-1;
while(i<=j)
mid=(i+j)/2;
if(a[mid]>insert)
j=mid-1;
else if(a[mid]<insert)
i=mid+1;
else//a[mid]==inset,数据重复
return 0;

//两分查找结束
//此时a[j]<insert<a[i],i-j=1

//把元素a[i...n-1]往后移
for(j=n;j>=i;j--)
a[j]=a[j-1];
//插入insert
a[i]=insert;
//调整元素个数
n++;

//输出
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;


其它补充:
(1)因为这是数组,数组插入元素时必须移动从插入位置往后所有的元素,所以用两分法一点也不高效。想高效地用两分法插入应该使用二叉树。
(2)高效地往已排序的数组中插入元素应该直接从后往前一边比较一边移边。
(3)程序中的两分查找非常有用,如果不会,一定要掌握。尤其要了解当跳出while循环时i,j值的含义,这样才能应对各种使用上的变化。
(4)本程序中,如果把insert改成-1或10,同样可以运行。
参考技术A 标准做法是使用适合插入的数据结构,比如链表或者二叉树,这样插入的效率最高。Java Collection有LinkedList链表类。如果java没有内置这些工具,比如树,就要自己先实现。
如果强行在普通[]数组中插入是很少见,算比较不地道的做法:
用复制的办法,复制前段数据,复制插入项,再复制后段数据。

以上是关于java在数组里查找数据的主要内容,如果未能解决你的问题,请参考以下文章

二分查找+二分答案(Java)

JAVA-初步认识-第五章-数组-常见操作-查找&折半查找

java 数据结构与算法 之查找法

js如何查找数组中是不是存在某个值

java 13-1 数组高级二级查找

查找不在数组里的字母