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

如何找到一个索引的int数组结束于一个特定的数字Java

罗祺
2023-03-14

嗨,伙计们,你们好吗?=)我是新来的Java,目前,我正在学习数组和循环,目前我真的在与它们作斗争。

我的任务是返回以9结尾的数字数组。不要更改其余数字的顺序。我唯一能用的就是for循环。

我的大脑现在有点崩溃了,我不知道该怎么办。

当我返回一个结果时,它以int3991599399的形式返回。

目前,我在考虑如何将结果排除在for循环之外。С你能帮我找到一种方法,将所有带有9的数字存储在一个新数组中吗?

    
public int[] leavePrice9(int[] prices) {
        
    for (int i = 0; i < prices.length; i++) {
            int result = prices[i];
            
            if (result % 10 == 9);
    }
}
    public static void main(String[] args) {
        QuadraticEquationSolver shop = new QuadraticEquationSolver();

        //Should be [399, 1599, 399]
        int[] prices = new int[] {399, 1599, 399, 50, 10, 10, 70};
        System.out.println(Arrays.toString(shop.leavePrice9(prices)));
    }
}

共有1个答案

阎经武
2023-03-14

您可以使用以下方法。它接受一个由int和一个数字(0-9)组成的数组,并返回一个新数组,其中包含所有将该指定数字作为最后一位数字的元素。原始数组的元素保持不变,因此顺序明显保留。

import java.util.*;

public class Application {
    public static void main(String[] args) {
        int[] prices = new int[]{399, 1599, 399, 50, 10, 10, 70};
        System.out.println(Arrays.toString(getAllWithLastDigit(prices, 9)));
    }

    public static int[] getAllWithLastDigit(int[] array, int lastDigit){
        if(lastDigit < 0 || lastDigit > 9) throw new IllegalArgumentException("lastDigit must be between 0 and 9!");
        var lst = new ArrayList<Integer>();
        for (int i = 0; i < array.length; i++) {
            int result = array[i];
            if (result % 10 == lastDigit) lst.add(result);
        }
        // convert array list back to integer array
        return lst.stream().mapToInt(i -> i).toArray();
    }
}

预期输出:

[399, 1599, 399]

这使用了一个ArrayList,当我们遇到最后一个数字是9的元素时,它可以动态地将元素添加到列表中。最后,我们需要将列表转换回数组,因为您需要返回一个整数数组。

您所做的只是字符串连接,而不是这样做,我们现在将元素添加到列表中,将该列表转换回int数组,然后返回它。您的实现忽略了创建和返回新数组的部分。

这里是一个没有使用ArrayList的版本。在这里,我们首先创建一个能够容纳最大结果数的数组,并向其中添加一个结果,同时为每个新元素增加一个计数器。然后我们必须(可能)缩小数组,以便它只包含数组中实际存在的元素数。为此,我们创建一个数组的副本,其中包含我们结果中的任何元素。

import java.util.*;

public class Application {
    public static void main(String[] args) {
        int[] prices = new int[]{399, 1599, 399, 50, 10, 10, 70};
        System.out.println(Arrays.toString(getAllWithLastDigit(prices, 9)));
    }

    public static int[] getAllWithLastDigit(int[] array, int lastDigit){
        if(lastDigit < 0 || lastDigit > 9) throw new IllegalArgumentException("lastDigit must be between 0 and 9!");
        // create an array which has the same size as the input, this way we guarantee that we have enough space for all result
        int[] elements = new int[array.length];
        // counter of how many elements are in the array 
        int counter = 0;
        for (int i = 0; i < array.length; i++) {
            int result = array[i];
            if (result % 10 == lastDigit) elements[counter++] = array[i];
        }
        // now we need to create a new array which is exactly as long as we need it (if we don't have that already)
        if(counter == array.length) return elements;
        // Alternative: use Java API Arrays.copyOf(elements, counter)
        return copyArray(array, counter);
    }

    public static int[] copyArray(int[] array, int newLength){
        if(newLength < 0) throw new IllegalArgumentException("Length must not be < 0");
        var copy = new int[newLength];
        // make sure we don't go out of bounds because the new array could be longer than the old one
        var until = Math.min(array.length, newLength);
        // copy over all elements
        for (int i = 0; i < until; i++) {
            copy[i] = array[i];
        }
        return copy;
    }
}
 类似资料:
  • 问题内容: 我有两个一维数组x和y,一个比另一个小。我试图找到x中y的每个元素的索引。 我发现有两种简单的方法可以做到这一点,第一种很慢,第二种需要占用大量内存。 记忆猪 是否有更快的方法或更少的内存密集型方法?理想情况下,搜索将利用以下事实:我们不是在列表中搜索一件事,而是在搜索许多东西,因此稍微适合并行化。如果您不假设y的每个元素实际上都在x中,则可获得加分。 问题答案: 正如Joe King

  • 我是一名 Java 初学者,我一直在尝试编写一种方法来列出数组中某个 int 的所有索引。到目前为止,我所做的是将该 int 的值存储在另一个数组中的相应索引处,但我能做的最好的事情就是将所有其他不等于原始 int 的索引的值设置为 -1。 我想我需要在数组中存储值I,并删除所有的-1,但是我不知道怎么做。顺便说一下,这些值是-1,因为这个程序中所有的数组都包含0-100之间的整数。如果数组中的整

  • 给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。 例子: 给定nums=,target=6, 因为=24=6 。 解决方案 上面的代码在其他情况下有效,但在本例中无效。 预期结果 输出 例如,我尝试使用不同的数字数组和不同的目标,即使你改变数字的顺序,它也能工作 例子: 新数组:,目标=9, 输出:。 我不明白这个解决方案出了什么问题,我希望有人能解释一下。谢谢

  • 问题内容: 我有两个numpy数组A和B。A包含唯一值,而B是A的子数组。 例如: 问题答案: 您可以使用带有- 如果您关心维护订单,也可以使用- 对于一般情况,当&是未排序的数组时,您可以在中引入选项,就像这样- 为了解决一般情况,我还会添加我最喜欢的内容- 样品运行-

  • 有一种方法可以将特定的数字从一个数组复制到另一个数组吗? 例如: 我有一个数组 ,我想将奇数和偶数复制到不同的数组中。因此,结果应该是

  • 如果我从问题中选择“q1”,我如何从答案中选择第一个数组? 这是我现在的代码: