在多个索引处查找相同的值

时间:2014-12-19 18:46:37

标签: java bufferedreader

我创建了一个java程序,它将在数组中搜索一个值,但我的问题是当我在不同的索引中输入相同的值时,第一个索引是唯一一个将在输出上的索引。

示例index 0 = 2, index 1 = 3, index 2 = 2

输出:array 2 is found at index 0 only

我在循环中将其分解以停止但如果我不这样做,它将循环输出

这是我想要的输出:array 2 is found at index 0,2

代码:

import java.awt.*;
import javax.swing.*;
import java.io.*;
public class Buff {
    public static void main(String args[]) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter how many index :");
        int v = Integer.parseInt( in .readLine());
        int x;
        int[] c = new int[v];
        int vv;
        for (x = 0; x < v; x++) {
            System.out.print("Enter your value :");
            c[x] = Integer.parseInt( in .readLine());
        }
        System.out.print("Enter your search number :");
        int xx = Integer.parseInt( in .readLine());
        for (x = 0; x < v; x++) {
            if (c[x] == xx) {
                System.out.print("array " + xx + " found at index :" + x);
                break;
            } else {
                System.out.print("array not found");
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

制作匹配的索引列表并在for循环中填充它的解决方案。

然后在for循环完成后,打印出结果

List<Integer> foundIndexes = new ArrayList<>();
for (x = 0; x < v; x++) {
     if (c[x] == xx) {
        foundIndexes.add(x);
     } 
}

//now we looped through whole array
if(foundIndexes.isEmpty()){
    System.out.print("array not found");
}else{
     System.out.print("array " + xx + " found at index : ");

    for(Integer i : foundIndex){
      System.out.print(i + ",");
    }
}

这将使用尾随逗号打印出array 2 is found at index 0,2,。在最后一个索引处没有尾随逗号会稍微复杂一些,但我会把它留给你来解决。

答案 1 :(得分:0)

如果您只关心输出索引,也可以使用StringBuilder。

StringBuilder sb = new StringBuilder("array" + xx +" is found at index: ");
 for (x = 0; x < v; x++) {
     if (c[x] == xx) {
         sb.append(x).append(",");
     }
 }


if (sb.charAt(sb.length() - 1) == ',') {
    sb.deleteCharAt(sb.length() - 1);
    System.out.println(sb);
} else {
    System.out.println("array not found");
}

答案 2 :(得分:0)

如果我理解正确,问题如下:

你有一个数组中的元素,你想检查一个特定的值是否在数组的多个位置,你的问题是如果你只是删除break语句,它会在每次你找不到时显示一条消息所需的数字,坦率地说是我在删除break语句时遇到的唯一问题。

就个人而言,我会做以下两件事之一:

选项A:您可以创建一个布尔变量,如果找到一个数字就会更改,然后等待发送“找不到数组”消息,直到您停止搜索它为止,如下所示:

         boolean found = false;
         for( x=0; x<v; x++)
         {
            if(c[x] == xx)
            {
                System.out.println("array " + xx + " found at index :"+x);
                found = true;
            }
         }
            if (found = false)
            {
                System.out.println("array not found");
            }

println与print相同,只是在最后引入了一个\ n,所以响应如下:

在索引处找到数组2:0

在索引处找到数组2:2

而不是:

在索引处找到数组2:0 数组2在索引处找到:2

选项B:可能更优雅的解决方案是创建其他数组来存储您找到所需元素的位置,然后一次打印它们,您可以在阵列上执行两次(一个计算数组必须有多少个位置,另一个来检查元素的位置)或者只是使用一个ArrayList,但由于这看起来像学习材料,我猜这是不可能的。

此外,如果有可能,请尝试更好地提出问题,因为我仍然不确定这是否是您所要求的。