当前位置: 首页 > 知识库问答 >
问题:

如何在多个数组中搜索输入值,并利用一个或多个 for-each 循环返回值和位置

耿玄裳
2023-03-14
import java.util.Scanner;
import java.util.Arrays; 


public class JMUnit1Ch9 {


public static void main(String[] args) 
    {

        Scanner stdIn = new Scanner(System.in); 
        int[] numbers = new int[10];
        int[] sortedNumbers = new int[numbers.length]; 
        for(int i=0; i<10; i++)
            {
                numbers[i]= (int)(Math.random()*20); 

            }//end for

        for(int i=0; i<numbers.length; i++)
        {
            sortedNumbers[i]=numbers[i]; 
        }//end for

        Arrays.sort(sortedNumbers);
        System.out.printf("%s%30s%n", "Unsorted Array", "Sorted Array");

        for(int i=0; i<numbers.length;i++)
            {
                System.out.printf("%-30.30s  %-30.30s%n", numbers[i], sortedNumbers[i]); 
            }
        System.out.printf("%s%n","Please enter a number to search for: "); 
        int numberSearch = stdIn.nextInt(); 
        boolean found = false;
        for(int i=0; i<numbers.length; i++)
        {
            if (numbers[i]==numberSearch)
            {
                System.out.printf("%nSearch Value: %d found at location: %d in the unsorted array",numberSearch,i); 

                found = true;
            }

            if (sortedNumbers[i]==numberSearch)
            {
                System.out.printf("%nSearch Value: %d found at location: %d in the sorted array",numberSearch,i);

            }
        }

        if (!found) 
        {
            System.out.printf("Search Value: %d was not found", numberSearch); 
        }

}

}

编辑:我根据评论者的推荐添加了for循环,并使其正常工作,但没有使用else或其他if循环,就像我在值不存在时使用的if循环一样,我不想要它,所以只说一次10次。

编辑2:这是教学大纲的链接:https://www.dropbox.com/s/zufjp8sct0jftvw/CS219 Unit 1 Ch 9 Assignment F2T 2015(1). pdf? dl=0

编辑3:现在使用新代码和更改完美更新工作。感谢大家的编辑和帮助。

以上是我到目前为止生成的代码。我成功完成上述任务的目标是

  • 声明一个大小为10的数组,
  • 用1-20之间的随机数填充数组,
  • 利用javaapi进行复制和排序,
  • 打印一个显示排序和未排序值的表
  • 并要求一个数字来搜索数组

我遇到的这个问题是最终目标,即利用数字输入搜索数组,并利用每个循环为排序数组和未排序数组中的搜索值和位置提供输出。

如果有人能给我一些帮助,弄清楚如何做到这一点。我唯一失败的想法是在每个循环中利用一个if else循环,但我无法利用我的数字搜索来找到任何东西,并且真的不知道如何实现这一点。

共有2个答案

郑旭
2023-03-14

要搜索数字并打印数组位置,如果找不到,请尝试发送错误消息

    System.out.printf("%s%n","Please enter a number to search for: "); 
    int numberSearch = stdIn.nextInt(); 
    boolean found = false;
    for(int i=0; i<numbers.length; i++)
    {
        if (numbers[i]==numberSearch)
        {
            System.out.printf("Search Value: %d found at location: %d 
                                     in the unsorted array",numberSearch,i); 
            found = true;
        }

        if (sortedNumbers[i]==numberSearch)
        {
            System.out.printf("Search Value: %d found at location: %d
                                      in the sorted array",numberSearch,i);
        }
    }

    if (!found) 
    {
        System.out.printf("Search Value: %d was not found", numberSearch); 
    }
吕扬
2023-03-14

如果你想显示索引,你不能使用 for-each 循环,好吧,你可以 - 但是你需要一个循环外部的某种计数器(因为 for-each 循环会隐藏迭代器)。只需使用常规的 for 循环。喜欢

for(int i = 0; i < numbers.length; i++)
{
    if (numbers[i] == numberSearch) { 
     // n == numbers[i] == numberSearch
        System.out.printf("%d is at %d%n", numberSearch, i);
    }
}

还可以做进一步的改进,假设您使用的是Java8,您可以使用IntStream创建十元素数组。打印表格,然后使用Arrays。binarySearch(int[],int)以查找排序数组中存在的元素(这样就不需要查找

Random r = new Random();
int[] numbers = IntStream.generate(() -> 1 + r.nextInt(20)).limit(10).toArray();
int[] sortedNumbers = Arrays.copyOf(numbers, numbers.length);
Arrays.sort(sortedNumbers);

// Nice table.
System.out.printf("%s%30s%n", "Unsorted Array", "Sorted Array");
for (int i = 0; i < numbers.length; i++) {
    System.out.printf("%-30.30s  %-30.30s%n", numbers[i], sortedNumbers[i]);
}

System.out.println("Please enter a number to search for: ");
int numberSearch = stdIn.nextInt();
int index = Arrays.binarySearch(sortedNumbers, numberSearch);
if (index > -1) {
    for (int i = 0; i < numbers.length; i++) {
        if (numbers[i] == numberSearch) {
            System.out.printf("Search Value: %d found at location: "
                    + "%d in the unsorted array%n", numberSearch,
                    i);
            break;
        }
    }
    System.out.printf("Search Value: %d found at location: "
            + "%d in the sorted array%n", numberSearch, index);
} else {
    System.out.printf("Search Value: %d was not found%n", numberSearch);
}

 类似资料:
  • 我有两个矩阵,一个是矩阵(ncol=1,nrow=20,000),存储我要搜索的值,另一个矩阵是矩阵,存储一个大型数据集(ncol=1,nrow=5,000)。 矩阵:(,,....是行名) 矩阵:(,,,,...是行名) 我要为矩阵中的每个值查找矩阵的哪一行包含该字符串,并记录其矩阵的行名,并将其放在矩阵中该字符串行的下列列中(或在一列中,但用“,”分隔)。 例如,我希望有一个循环,首先从索引矩

  • 问题内容: 选项:使用元组 考虑下面这个简单的例子: 但是,随着返回值的数量增加,这很快就会成为问题。如果要返回四个或五个值怎么办?当然,你可以继续修改它们,但是很容易忘记哪个值在哪里。在任何想要接收它们的地方打开它们的包装也是很丑陋的。 选项:使用字典 下一步的逻辑步骤似乎是引入某种“记录符号”。在Python中,一种明显的方法是使用dict。 考虑以下: (请注意,y0,y1和y2只是抽象标识

  • 问题内容: 是否有一个内置的PHP函数用一个数组替换字符串中的多个值,该数组精确地指示要替换为什么? 例如: 结果将是:’bleh blerh bleh bleh blerh’。 问题答案: 您正在寻找。 //额外提示: 而且,如果您像示例中那样受困于一个关联数组,则可以像这样拆分它:

  • 这是关联数组: 我知道通过使用过滤数据并比较值的正常方法。我想在中搜索以下键/值对。 理想的输出应该是来自的第一个元素,因为它booking_name=abc,pdg=保证和user_area=es st 我尝试了: 这总是返回空数组。 仅供参考-我是新的。 更新1: 我使用下面的方法来获取具有可见。对所问问题进行了类似的尝试,但未能获得理想的结果。 如何在关联数组上应用作为数组数组传递的多个过滤

  • 是否可以对同一个事务多次调用< code > dslcontext . transaction result()? 我希望在同一个事务中向不同的表中插入行,并将主键返回给封闭(非事务)代码块。 我知道我可以创建一些自定义的返回类型来保存多个值,但是从代码可读性的角度来看,最好是多次调用< code > dslcontext . transaction result()并每次传递一个单独的结果。

  • 现在我想在文本框中输入一些日期,并在下拉列表中选择一些值。 当我点击它应该得到保存到数据库。 我该怎么做? 这是我的密码 php插入代码:当我点击提交时,这个php代码应该 下拉列表是动态生成的 代码: ui看起来像这样...