我想使用Java从Character数组返回用户输入子字符串的索引。对数组进行初始化,加扰,然后进行搜索。我是新手,并尝试了两种不同的方法但没有成功。我在俯瞰什么?提前谢谢。
方法1:
import java.lang.Math;
import java.util.Scanner;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;
public class ArrayRandomChar {
public static void main(String[] args) {
// Create an array of characters:
Character[] anArray = {'P', 'A', 'P', 'A', 'B', 'E', 'A', 'R'};
for (char ch: anArray)
System.out.print(ch + " ");
System.out.println();
// Create list from array and shuffle
List<Character> aList = Arrays.asList(anArray);
Collections.shuffle(aList);
System.out.print(aList);
System.out.println();
// Bring back into array
Object ob[] = aList.toArray();
for (Object ch: anArray)
System.out.print((Character) ch + " ");
// User input
Scanner input = new Scanner(System.in);
String letter = input.next();
System.out.println(letter);
// Return index of letter, -1 if doesn't contain
int retval = aList.IndexOf(letter);
System.out.println(retval);
}
}
问题:在运行文档并输入字母时,即使列表中包含该字母,也会返回 -1 。
方法2:
public class ArrayRandomChar {
public static void main(String[] args) {
// Create an array of characters:
Character[] anArray = {'P', 'A', 'P', 'A', 'B', 'E', 'A', 'R'};
for (char ch: anArray)
System.out.print(ch + " ");
System.out.println();
// Create list from array:
List<Character> aList = Arrays.asList(anArray);
Collections.shuffle(aList);
System.out.print(aList);
System.out.println();
//create array from list
Object ob[] = aList.toArray();
for (Object ch: anArray)
System.out.print((Character) ch + " ");
//user input
Scanner input = new Scanner(System.in);
String letter = input.next();
int index = Arrays.binarySearch(anArray, letter);
System.out.println(~index);
System.out.println(letter);
}
}
抛出异常:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Character
at java.lang.Character.compareTo(Character.java:101)
at java.util.Arrays.binarySearch0(Arrays.java:2001)
at java.util.Arrays.binarySearch(Arrays.java:1943)
at ArrayRandomChar.main(ArrayRandomChar.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
答案 0 :(得分:4)
这将解决问题..
方法1:
int retval = aList.indexOf(letter.charAt(0));
方法2:
int index = Arrays.binarySearch(anArray, letter.charAt(0));
问题是你有一个字符数组aList
,letter
是一个字符串,因此它在字符数组中搜索String
。哪个可能导致ClassCastException
或找不到String。
简而言之:
不同Character A
与String A
答案 1 :(得分:1)
方法1:
好的,这个问题@Dileep已经回答了,运行文档并输入字母时,即使返回-1,也会返回 列表中包含这封信。
int retval = aList.IndexOf(letter);
错误是您已将String
类型传递给List.indexOf(Object o)
,aList
包含Character
类型的所有元素。所以List.indexOf()
将始终返回-1。
你可能会改变工作:
int retval = aList.indexOf(Character.toUpperCase(letter.charAt(0)));
注意:我使用了Character.toUpperCase(),因为你有大写的所有元素。 子>
<小时/> 方法2:
抛出
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Character
异常消息已经回答,String
无法更改/转换为Character
,
int index = Arrays.binarySearch(anArray, letter);
在这里,
anArray
包含元素类型Character
在String
调用Arrays.binarySearch()
时,您已在内部char
传递Character
而不是Arrays#binarySearch()
或Character.compareTo(T o)
这里,指定对象的类型(即letter#String
)阻止它与Character对象进行比较。然后扔掉了ClassCastException
。
解决方案:
int index = Arrays.binarySearch(anArray, Character.toUpperCase(letter.charAt(0)));