精华内容
下载资源
问答
  • 2021-04-22 18:31:06

    如果您使用索引保存第三个数组,并使用sort()与自定义比较器进行排序,则会保留数据。

    Java代码示例:

    Integer[] idx = new Integer[numbers.length];

    for( int i = 0 ; i < idx.length; i++ ) idx[i] = i;

    Arrays.sort(idx, new Comparator() {

    public int compare(Integer i1, Integer i2) {

    return Double.compare(numbers[i1], numbers[i2]);

    }

    });

    // numbers[idx[i]] is the sorted number at index i

    // colors[idx[i]] is the sorted color at index i

    请注意,您必须使用整数而不是int,否则您不能使用自定义比较器。

    更多相关内容
  • 1.自己编写方法(函数) publicintgetIntIndex(int[]nums,intkey){ for(inti=0;i<nums.length;i++){ if(nums[i]==key){ returni; } } return -1;...2.使用java自带函数 (1).将int数组装箱为Inte...

    1.自己编写方法(函数)

    public int getIntIndex(int[] nums, int key) {
    
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] == key) {
                    return i;
                }
            }
            return -1;
        }

    2.使用java自带函数

    (1).将int数组装箱为Integer类型

    ①.先将int数组转换为数值流

    IntStream numstostream = Arrays.stream(nums);

    ②.然后将数值流中的元素全部装箱,转换Integer类型:

    Stream streamtoInteger = numstostream.boxed();

    ③.将Integer类型元素(流)转换为Integer数组

    Integer[] integer = streamtoInteger.toArray(Integer[]::new);

    System.out.println(Arrays.toString(integer));

    (2).使用java.util.Arrays的方法

    ①.方法一:

    在整个Integer数组中查询指定元素的索引值:Arrays.binarySearch(被查询数组nums,元素值vlaue); 

    Arrays.binarySearch(Object[] nums,Object value);

    ②.方法二:
    在Integer数组指定索引区间中查询指定元素值的索引值:Arrays.binarySearch(被查询数组nums,开始索引,结束索引,查询元素值vlaue); 

    Arrays.binarySearch(Object[] nums, startIndex, endIndex,Object key);
     

    注:指定索引区间的范围:从开始索引startIndex开始,到结束索引endIndex结束,但不包括endIndex值,即[startIndex,endIndex),“左闭右开”。
           
     

    展开全文
  • 我希望在Java中找到给定元素的索引,知道它的内容。我尝试了以下示例,该示例不起作用:class masi {public static void main( String[] args ) {char[] list = {'m', 'e', 'y'};// should print 1System.out....

    我希望在Java中找到给定元素的索引,知道它的内容。

    我尝试了以下示例,该示例不起作用:

    class masi {

    public static void main( String[] args ) {

    char[] list = {'m', 'e', 'y'};

    // should print 1

    System.out.println(list[] =="e");

    }

    }

    任何人都可以解释这有什么问题以及我需要做些什么来解决它?

    在这种情况下,您可以从字符数组中创建新的String,然后对该字符串执行indeoxOf("e"):

    System.out.println(new String(list).indexOf("e"));

    但在原始数据类型的其他情况下,您将不得不迭代它。

    或者,您可以使用Commons Lang ArrayUtils类:

    int[] arr = new int{3, 5, 1, 4, 2};

    int indexOfTwo = ArrayUtils.indexOf(arr, 2);

    对于不同的数组类型,存在indexOf()方法的重载变体。

    这是最好的方法。如果您的项目中没有apache,请添加它。另一种方法是使用java.util.Arrays.binarySearch但它需要一个有序数组,因此并不总是有用。

    这甚至不是有效的语法。而你正在尝试与字符串进行比较。对于数组,您必须自己遍历数组:

    public class T {

    public static void main( String args[] ) {

    char[] list = {'m', 'e', 'y'};

    int index = -1;

    for (int i = 0; (i < list.length) && (index == -1); i++) {

    if (list[i] == 'e') {

    index = i;

    }

    }

    System.out.println(index);

    }

    }

    如果您正在使用集合,例如ArrayList,您还可以使用indexOf()方法:

    ArrayList list = new ArrayList();

    list.add('m');

    list.add('e');

    list.add('y');

    System.out.println(list.indexOf('e'));

    还有Arrays类缩短了上面的代码:

    List list = Arrays.asList(new Character[] { 'm', 'e', 'y' });

    System.out.println(list.indexOf('e'));

    我非常怀疑你可以从中构建一个list类型。如果存在,则严重违反命名约定。

    list定义toArray方法

    这是对aperkins的回复,他显然给了我一个downvote,声明list[] =="e"是无效的语法。要使[]起作用,list必须是类型,而不是变量。多数民众赞成我用"list类型来构建数组"的意思。很抱歉对于这个误会。

    对于原始数组

    从Java 8开始,基本数组arr的通用解决方案和搜索val的值是:

    public static int indexOf(char[] arr, char val) {

    return IntStream.range(0, arr.length).filter(i -> arr[i] == val).findFirst().orElse(-1);

    }

    此代码使用IntStream.range在数组的索引上创建流,过滤索引以仅保留索引处的数组元素等于搜索值的那些索引,最后保留第一个与findFirst匹配的索引。 findFirst返回OptionalInt,因为可能找不到匹配的索引。所以我们调用orElse(-1)来返回找到的值,如果没有找到则返回-1。

    可以为int[],long[]等添加重载。方法的主体将保持不变。

    对于对象数组

    对于对象数组,如String[],我们可以使用相同的想法并使用equals方法进行过滤步骤,或者Objects.equals来考虑两个null元素相等,而不是==。

    但我们可以通过以下方式更简单地完成:

    public static < T > int indexOf(T[] arr, T val) {

    return Arrays.asList(arr).indexOf(val);

    }

    这将使用Arrays.asList为输入数组创建一个列表包装器,并使用indexOf搜索元素的索引。

    这个解决方案不适用于原始数组,如下所示:像int[]这样的基本数组不是Object[]而是Object;因此,在其上调用asList会创建单个元素的列表,该列表是给定的数组,而不是数组元素的列表。

    我相信only strike>这样做的方法是手动迭代数组。

    for (int i = 0; i < list.length; i++) {

    if (list[i] == 'e') {

    System.out.println(i);

    break;

    }

    }

    您的代码存在的问题是,当您这样做时

    list[] =="e"

    你问的是数组对象(不是内容)是否等于字符串"e",显然不是这种情况。

    您需要迭代内容以进行所需的检查:

    for(String element : list) {

    if (element.equals("e")) {

    // do something here

    }

    }

    最简单的解决方案

    Convert array to list and you can get position of an element.

    List abcd  = Arrays.asList(yourArray);

    int i = abcd.indexOf("abcd");

    其他解决方案,你可以迭代数组:

    int position = 0;

    for (String obj : yourArray) {

    if (obj.equals("abcd") {

    return position;

    }

    position += 1;

    }

    //OR

    for (int i = 0; i < yourArray.length; i++) {

    if (obj.equals("abcd") {

    return i;

    }

    }

    现在它打印1

    class Masi {

    public static void main( String [] args ) {

    char [] list = { 'm', 'e', 'y' };

    // Prints 1

    System.out.println( indexOf( 'e', list ) );

    }

    private static int indexOf( char c , char [] arr ) {

    for( int i = 0 ; i < arr.length ; i++ ) {

    if( arr[i] == c ) {

    return i;

    }

    }

    return -1;

    }

    }

    请记住这一点

    "e"

    是一个字符串对象文字(表示一个字符串对象)

    'E'

    是字符文字(表示字符原始数据类型)

    即便

    list[]

    有效的Java(不是)将字符元素与字符串元素进行比较,无论如何都会返回false。

    只需使用indexOf字符串函数,您就可以在任何字母表(或字符数组)中找到任何字符

    这是另一个例子以及indexOf是如何工作的。

    public int indexOf(Object target) {

    for (int i = 0; i < array.length; i++) {

    if (equals(target, array[i])) {

    return i;

    }

    }

    return -1;

    }

    这种方式应该工作,将"char"更改为"Character":

    public static void main(String[] args){

    Character[] list = {'m', 'e', 'y'};

    System.out.println(Arrays.asList(list).indexOf('e')); // print"1"

    }

    非常沉重的编辑。我想要么你想要这个:

    class CharStorage {

    /** set offset to 1 if you want b=1, o=2, y=3 instead of b=0... */

    private final int offset=0;

    private int array[]=new int[26];

    /** Call this with up to 26 characters to initialize the array.  For

    * instance, if you pass"boy" it will init to b=0,o=1,y=2.

    */

    void init(String s) {

    for(int i=0;i

    store(s.charAt(i)-'a' + offset,i);

    }

    void store(char ch, int value) {

    if(ch < 'a' || ch > 'z') throw new IllegalArgumentException();

    array[ch-'a']=value;

    }

    int get(char ch) {

    if(ch < 'a' || ch > 'z') throw new IllegalArgumentException();

    return array[ch-'a'];

    }

    }

    (注意,如果要使用1-26而不是0-25,则可能需要调整init方法)

    或者你想要这个:

    int getLetterPossitionInAlphabet(char c) {

    return c - 'a' + 1

    }

    第二个是如果你总是想要= 1,z = 26。第一个会让你输入像"qwerty"这样的字符串并指定q = 0,w = 1,e = 2,r = 3 ...

    我需要在数组中使用字母表,如:a - > 1,b - > 2,...,z - > 26. - 我编写的只是为了好玩,而不是作业作业。

    您的解决方案建议我需要26个hashMap命令。有没有办法组合hashmaps命令?

    嘿,如果你只想知道a是1,b是2,只需使用"charValue-a + 1"!我以为你想要实际上有不同的价值观,或者把东西存放在桶里。

    我正在提供适当的方法来做这个

    /**

    * Method to get the index of the given item from the list

    * @param stringArray

    * @param name

    * @return index of the item if item exists else return -1

    */

    public static int getIndexOfItemInArray(String[] stringArray, String name) {

    if (stringArray != null && stringArray.length > 0) {

    ArrayList list = new ArrayList(Arrays.asList(stringArray));

    int index = list.indexOf(name);

    list.clear();

    return index;

    }

    return -1;

    }

    不要转换为ArrayList,也不要调用list.clear()。那些是多次迭代数组2。

    如果元素的初始顺序不是很重要,你可以只对数组进行排序,然后二进制搜索它:

    import java.util.Arrays;

    class masi {

    public static void main( String[] args ) {

    char[] list = {'m', 'e', 'y'};

    Arrays.sort(list);

    // should print 0, as e is now sorted to the beginning

    // returns negative number if the result isn't found

    System.out.println( Arrays.binarySearch(list, 'e') );

    }

    }

    这个命令对我来说很重要。我的例子比我目前的问题更简单。实际上我在列表中有26个字母,从a,b,...到z。

    这样你就可以使用最多'N'个字母。

    char[] a={ 'a', 'b', 'c', 'd', 'e' };

    int indexOf=0;

    for(int i=0;i

    if(a[i] != 'b'){

    indexOf++;

    }else{

    System.out.println("index of given:"+indexOf);

    }}

    展开全文
  • main应该分解名字和姓氏并将姓氏存储在新数组中。我的代码中存在逻辑错误,因为这部分不打印。package names;import java.io.*;import java.util.*;public class names {public static void main(String[] args) ...

    main应该分解名字和姓氏并将姓氏存储在新数组中。我的代码中存在逻辑错误,因为这部分不打印。

    package names;

    import java.io.*;

    import java.util.*;

    public class names {

    public static void main(String[] args) throws FileNotFoundException {

    final int TOTALNAMES=15;

    String [] names = new String[TOTALNAMES];

    String [] firstname = new String[TOTALNAMES];

    //String

    File file = new File ("Names12.txt");

    Scanner read = new Scanner (file);

    printHeading();

    int i, cntr=0;

    while(read.hasNext()&&cntr

    cntr++;

    read.nextLine();

    }

    String[] name = new String[cntr];

    Scanner read1 = new Scanner(file);

    for( i = 0; i

    name[i] = read1.next();

    //System.out.println(name[i]);

    }

    //creating new string array to hold last name values

    int j;

    String[] lastname = new String[name.length];

    for(j = 0; j < lastname.length; j++){

    lastname[j]=names[i].substring(name[i].indexOf(" "+1));

    System.out.println(lastname[j]);

    }

    }

    //This method prints the heading centered

    public static void printHeading () {

    System.out.println("\t\t\t\tTable of Names");

    }

    //This method reads in the names from the file into an array

    public static int readNames(Scanner keyboard, String[]names) throws FileNotFoundException {

    int count = 0;

    names = new String[15];

    for (int i = 0; i < names.length; i++) {

    names [i] = keyboard.nextLine();

    System.out.println(names[i]);

    count++;

    }

    return count;

    }

    }

    My methods print, but the while loop is silent.

    参考方案

    在while循环内,此行:

    read.nextLine();

    执行行读取,但不将其存储在任何地方。

    我也看到不需要循环并创建第二个Scanner对象,这是为什么?

    您需要读取数组names中的所有行,然后循环遍历该数组以提取姓氏。

    可以在读取文件时在一个循环中完成此操作,但是出于可读性考虑,我使用2个循环:

    public static void main(String[] args) throws FileNotFoundException {

    final int TOTALNAMES = 15;

    int cntr = 0;

    String [] names = new String[TOTALNAMES];

    String [] firstname = new String[TOTALNAMES];

    String [] lastname = new String[TOTALNAMES];

    File file = new File("Names12.txt");

    Scanner read = new Scanner(file);

    printHeading();

    while(read.hasNext() && cntr < TOTALNAMES){

    cntr++;

    names[cntr - 1] = read.nextLine();

    }

    read.close();

    for(int i = 0; i < cntr; i++){

    //firstname[i] = names[i].substring(0, names[i].indexOf(" "));

    lastname[i] = names[i].substring(names[i].indexOf(" ") + 1);

    System.out.println(lastname[i]);

    }

    }

    java:继承 - java

    有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…Java-如何将此字符串转换为日期? - java

    我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…JAVA 8具有任何匹配属性的对象的过滤器列表 - java

    我的要求是通过匹配任何属性的字符串来过滤对象列表。例如,假设Contact类具有三个属性:街道,城市,电话。我知道java流过滤器是如何工作的,在这里我必须将输入字符串与每个属性进行比较,如下所示:contactList.stream().filter(contact -> contact.getStreet().equals("dubai&…Java-固定大小的列表与指定初始容量的列表之间的差异 - java

    我在理解这一点上遇到了问题。当我们做 List list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List list2 = new A…解析文档时如何用另一个字符串替换文档中字符串的一部分 - java

    我有一个解析的PDF文档,我使用Java中的一个库进行了解析。问题是文档中的表没有正确解析,它像文本(逐行)一样被解析。因此,我在Python中使用了一个名为Camelot的库,该库为我提供了已解析的表格式,并将其发送给Java。我需要用来自Camelot的PDF解析表替换PDF解析表,并保持其余部分不变。文档中有多个表,因此已解析的表以字符串列表的形式返回…

    展开全文
  • JAVA 需要自己实现 需要从键盘输入,复习循环,数组,以及Scanner的使用 import java.util.Scanner; public class demo4 { //查找对应该元素数组对象数组中index的位置 public static void main(String[] args) { ...
  • [Java教程]js如何移除数组中指定索引的项0 2016-01-03 11:00:05js如何移除数组中指定索引的项:在Array对象中有给定的函数可以删除数组中指定的元素,虽然非常好用,但是总感觉看不到摸不着的比较别扭,下面就分享一...
  • Java 获取元素在数组中的位置

    千次阅读 2021-02-12 13:52:21
    java 中如何获取元素在数组中的位置呢?(1)/**** Get location of element in a array* @param arr : a array* @param value2 : element of array* @return*/public static int indexOfArr(String[] arr,String ...
  • * 给定一个大小为 n 的数组,找到其中的多数元素。 * 多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 * 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 * 示例 1: * 输入:[3,2,3] -> ...
  • Java数组中查找指定元素的方法

    千次阅读 2021-03-11 15:26:26
    以下实例演示了如何使用 contains () 方法来查找数组中的指定元素:例子1import java.util.ArrayList;public class Main {public static void main(String[] args) {ArrayList objArray = new ArrayList();ArrayList...
  • } } 如果int是匹配项,则我必须显示它出现在数组中的第一个索引,否则,我必须显示-1.看来应该是这样写的,但是我一直得到-1作为答案.我如何保持相同的格式,因为我只能使用什么格式来获取正确的输出. 解决方法: 1)出现在...
  • Java-数组和String类

    2022-04-10 22:14:59
    可以通过索引来访问数组中的元素,第一个数组索引值为0,所以数组的最大索引值为.lengtg-1 String类 String代表字符串,java中所有的字符串文字,都被看成是该类的实例。 创建字符串的方法 1·无参构造:String ...
  • JAVA学生数组

    2021-03-31 11:01:10
    JAVA定义写生数组,实现增删改查 Student.java package C314.TODO; import java.text.SimpleDateFormat; import java.util.Date; /** * copyright(c)2021 LJT.ALL rights Reserved * <p> * 描述:学生类...
  • 查找数组中的索引

    千次阅读 2020-07-21 19:59:16
    题目: 已知一个数组 arr = {19, 28, 37... 4:遍历数组获取数组中的每一个元素 5:拿键盘录入的数据和数组中的每一个元素进行比较,如果值相同,就把该值对应的索引赋值给索引变量,并结束循环 6:输出索引变量 pub
  • 这种异常针对的是数组Array的使用过程中出现的错误 public static void main(String[] args) { int[] arr = {1, 2, 3}; for (int i = 0; i ; i++) { System.out.println(arr[i]); // 因为a[4]获取第四个值时报的错 }...
  • import java.util.Arrays;int[] array1={7,8,3,2,12,6,5,4};1. //克隆cloneint[] array2=array1.clone();System.out.println("arry2克隆的结果是:"+Arrays.toString(array2));2. //复制copyof①方法一:int [] array...
  • package practice; public class ElementExtraction { public static void main(String[] args) { ... System.out.println("数组元素:"); int qualify = 0; // 统计合格数字个数的累加变量 for (int i = 0; i
  • 我有一个整数数组...我想获取其ID与myArray的值匹配的MyDept的那些对象.如果列表中的对象是Objfirst(1,"Training"), Objsecond(2,"Legal"), Objthird(3,"Media")然后我要Objfirst和Objthird.解决方法:您可以按...
  • 标题数组什么时候报下标越界、什么时候报空指针(了解即可)数组与ArrayList的比较 数组什么时候报下标越界、什么时候报空指针(了解即可) 结论:在有值得情况下你超过数组下标必然报数组下标越界。 在无值的情况下你要...
  • 数组的基本使用 为什么需要数组 一个养鸡场有 6 只鸡,它们的体重分别是 3kg,5kg,1kg,3.4kg,2kg,50kg 。请问这六只鸡的总体重是多少?平均体重是多少? 思路分析:定义 6 个变量 , 加起来 总体重,求出平均体重....
  • concurrentHashMap分段锁原理,java8和java7实现的区别 B-树和B+树区别,数据库索引原理,组合索引怎么使用?最左匹配的原理 spring生命周期,几种scope区别,aop实现有哪几种实现,接口代理和类代理会有什么区别 ...
  • 给定一个升序排列的整数数组,和一个目标值,找出给定目标值在数组中的开始位置和结束位置,如果数组中不存在目标值,返回[-1,-1] 输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4] 输入:nums = [5,7,7,8,8,10...
  • B:写一个功能实现遍历数组,依次获取数组中的每一个元素,和已知的数据进行比较如果相等,就返回当前的索引值。*/class ArrayTest5 {public static void main(String[] args) {//定义一个数组,并静态初始化int[] ...
  • Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结构中熟知的。例如Map,...
  • java-数组入门题

    2021-05-24 19:44:28
    1.声明一个int型的数组,循环随机生成13个1到13之间随机数放入到此数组中去,再循环输出 // 1.声明一个int型的数组,循环随机生成13个1到13之间随机数放入到此数组中去,再循环输出 public static void fun1() { ...
  • 题目描述 输入一个整数n,然后输入n个字符串,将这个n个字符串保存在数组中。寻找上述数组元素中按字典顺序比较最小的字符串(你可直接使用compareTo方法判断大小),在...import java.util.Scanner; public class Main{
  • Java打印数组中重复元素1 说明在此程序中,我们需要打印数组中存在的重复元素。这可以通过两个循环来完成。第一个循环将选择一个元素,第二个循环将通过将所选元素与其他元素进行比较来遍历整个数组。如果找到匹配项...
  • Java数组的for-each循环

    千次阅读 2021-01-09 09:45:10
    for-each循环显着减少了代码,并且循环中没有使用索引或计数器。 句法: For(<数组/列表的数据类型> <临时变量名称>:<要迭代的数组/列表>){ System.out.println(); //使用此temp变量...
  • 数组和集合的效率问题数组JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素。但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的。...
  • Java 数组二分查找法

    2021-08-03 15:40:23
    想在数组中找到某个元素的索引位置,从头遍历数组匹配,数组数据少的时候可以,但是数组数据大的时候就会变慢,耗费性能,这时就需要二分查找法 比如: 从1 - 10 之间,判断8 的索引位置 首先求中间索引号,0 - 9...
  • 二、一维数组使用:声明和初始化、使用、获取长度、遍历、默认值、内存解析; 三、多维数组的使用:同上; 四、基于数组的常见算法:赋值、最大值/最小值/和/平均分等; 五、Arrays类详解; 六、数组常见异常; 七、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,979
精华内容 29,991
关键字:

java获取数组匹配的索引

java 订阅