// 定义一个函数,接收一个数组与一个要查找的元素,如果该元素存在数组中,那么返回该元素在数组中的索引值,如果不存在返回-1。(不要严格要求使用二分查找法)
import java.util.Scanner;
class demo2
{
public static void main(String[] args){
int[] index=lookfornum();
for (int i=0;i<index.length ;i++ ){
System.out.println(index[i]);
}
}
//定义一个函数接受数组,返回数组类型。
public static int[] lookfornum(){
Scanner le=new Scanner(System.in);
System.out.print("定义数组的长度:");
int arrlength=le.nextInt();
int[] arr =new int[arrlength];
for (int i=0;i<arrlength ;i++)
{
System.out.print("输入"+i+"元素值:");
arr[i]=le.nextInt();
}
System.out.print("输入要查找元素:");
int looknum=le.nextInt();
//确定与输入查找元素相同元素的个数
int j=1;
for (int i=0;i<arrlength ;i++ ){
if (arr[i]==looknum){
j++;
}
}
//定义返回索引值数组
int[] a=new int[j];
//查找相同索引值
for (int r=0;r<j ;r++ ){
for (int i=0;i<arrlength ;i++ ){
if (arr[i]==looknum){
a[r]=i;
}
else{
a[r] = -1;
}
}
}
return a;
}
}
各位前辈能帮我看看代码有什么地方可以改改啊,总感觉这样太复杂啊》谢谢
逻辑比较繁琐,而且后面有错误。先说你代码里的错误:
//定义返回索引值数组
int[] a=new int[j];
//查找相同索引值
for (int r=0;r<j ;r++ ){
for (int i=0;i<arrlength ;i++ ){
if (arr[i]==looknum){
/** 逻辑错误:需要在执行a[r]=i;后跳出本层循环**/
a[r]=i;
}
else{
a[r] = -1;
}
}
}
我觉得按照你认定的可能存在多个位置符合要求的逻辑,可以这么写会好一些:如果查到返回所有位置索引列表,否则返回空的列表。
public static void main(String[] args) {
java.util.List<Integer> indexList = lookfornum();
if(indexList.isEmpty()){
System.out.println("没有查到!");
}else{
System.out.println("查到如下位置:");
for (Integer i : indexList) {
System.out.print(indexList.get(i) + " ");
}
System.out.println();
}
}
// 定义一个函数接受数组,返回数组类型。
public static java.util.List<Integer> lookfornum() {
Scanner le = new Scanner(System.in);
System.out.print("定义数组的长度:");
int arrlength = le.nextInt();
int[] arr = new int[arrlength];
for (int i = 0; i < arrlength; i++) {
System.out.print("输入" + i + "元素值:");
arr[i] = le.nextInt();
}
System.out.print("输入要查找元素:");
int looknum = le.nextInt();
// 确定与输入查找元素相同元素的个数
java.util.List<Integer> list = new java.util.ArrayList<Integer>();
for (int i = 0; i < arrlength; i++) {
if (arr[i] == looknum) {
list.add(i);
}
}
return list;
}
System.out.print(indexList.get(i) + " ");
上面修改成:
System.out.print(i + " ");