Java 数组中的移动索引
我正在尝试编写一个程序,该程序接收字符串[],并按字母顺序首先打印出第一个字符串的数组。我必须使用三种类似的方法。以下是一个输入/输出示例:Java 数组中的移动索引,java,arrays,shift,Java,Arrays,Shift,我正在尝试编写一个程序,该程序接收字符串[],并按字母顺序首先打印出第一个字符串的数组。我必须使用三种类似的方法。以下是一个输入/输出示例: bob, joe, aaron, zack ----> aaron, bob, joe, zack findFirstName按字母顺序正确查找第一个字符串并返回其位置。 MoveToRightOne在按字母顺序覆盖第一个字符串并重复第一个字符串(例如:bob joe zack)的同时正确地将每个字符串右移一位。 moveName工作不正常。它
bob, joe, aaron, zack ----> aaron, bob, joe, zack
findFirstName按字母顺序正确查找第一个字符串并返回其位置。
MoveToRightOne在按字母顺序覆盖第一个字符串并重复第一个字符串(例如:bob joe zack)的同时正确地将每个字符串右移一位。
moveName工作不正常。它应该用aaron替换bob的第一个实例,但通常会偏离一到两个位置。
有人知道为什么moveOne会发生这种情况吗
moveToRightOne不会复制传入的名称数组。相反,它直接修改它。这意味着当你说
String[] NewNames = moveToRightOne(names1, firstPosition, firstPosition+1);
字符串将在names1中移位,之后,NewNames和names1将只是对同一数组的引用。我认为您的目的是使NewNames成为一个字符串移位的数组,而不使用names1,但实际情况并非如此。这意味着以下语句将返回错误的字符串:
String firstAlph= names1 [firstPosition];
或者,由于names1已经是名称的克隆,当您试图从尚未移位的数组中访问元素时,可能需要使用名称而不是names1。您的moveToRightOne函数已中断,因此您实际上没有使用传入的所有参数。此外,在使用该函数覆盖名字之前,应该按字母顺序获取名字
public class Shift {
public static void moveName(String [] names) {
int firstPosition = findFirstName(names);
// Store the name at that position
String firstName = names[firstPosition];
moveToRightOne(names, 0, firstPosition);
names [0] = firstName;
}
public static int findFirstName(String[] names1) {
// receives an array of Strings, and returns the location (i.e. index)
// of the first name (alphabetically)
String first=names1[0];
int firstPosition = 0;
for (int i=0; i<names1.length; i++) {
int result =names1[i].compareToIgnoreCase(first);
if (result < 0) {
first= names1[i];
firstPosition = i;
}
}
return firstPosition;
}
public static void moveToRightOne (String[] names, int startSpot, int endSpot) {
for (int i = (endSpot - 1); i >= startSpot; i--) {
names[i+1] = names[i];
}
}
public static void main(String[] args) {
String[] original = new String[] { "bob", "joe", "aaron", "zac"};
for (String s: original) System.out.println(s);
System.out.println();
moveName(original);
for (String s: original) System.out.println(s);
}
}
请改用Arrays.sort进行排序。这不是问题的确切解决方案,而是另一种解决方法
import java.util.Arrays;
public class Test{
Public static void main(String args[]){
String str[]= {'Mike','Adam','Peter','Brian'};
System.out.println("str"+str[0]); // Mike
Arrays.sort(str);
System.out.println("str"+str[0]); //Adam
}
}
你确定moveToRightOne是正确的吗?如果firstPosition为0,则不会得到任何更改,因为for循环将不会执行
想一想:
如果你想手动排序,我想这是一个类。我还假设您正在尝试实现插入排序算法,否则Arrays.sort是您的朋友。按照您接近它的方式,看起来您将多次通过数组来实现排序。如果您想这样做,请切换到冒泡排序
插入排序代码的描述如下所示:
开始在数组中循环,比较索引处的元素是否大于索引+1处的元素。如果不是true,则移动到下一个元素。如果为true,则将较小的元素称为A与所有先前的元素进行比较,直到它大于下一个先前的元素。让我们将其称为B。将B之后的所有元素向右移动1,直到到达A的旧位置。将A的副本插入B之后的位置。从旧A的索引继续。冲洗/重复,直到阵列结束
在这种情况下,您可能希望简化代码,并始终检查边缘条件,如0和Array.length
HTH请提供一个最低限度的工作示例,在该示例中,您实际调用代码并得到错误的结果。在编写时,您的代码采用参数,而您的文字描述的是值,因此有点难以理解。例如,如果我输入bob,joe,aaron,zack,它将返回joe,bob,joe,zack。为了清晰起见,请还包括所需的输出。所需的输出是aaron,bob,joe,zack。您存储了名字的位置,移动数组,使该位置无效。存储实际名称。我建议在您的答案上添加一些额外的解释。OA花时间写他们的问题。也许你可以澄清并扩大你的回答?
String firstAlph= names1 [firstPosition];
public class Shift {
public static void moveName(String [] names) {
int firstPosition = findFirstName(names);
// Store the name at that position
String firstName = names[firstPosition];
moveToRightOne(names, 0, firstPosition);
names [0] = firstName;
}
public static int findFirstName(String[] names1) {
// receives an array of Strings, and returns the location (i.e. index)
// of the first name (alphabetically)
String first=names1[0];
int firstPosition = 0;
for (int i=0; i<names1.length; i++) {
int result =names1[i].compareToIgnoreCase(first);
if (result < 0) {
first= names1[i];
firstPosition = i;
}
}
return firstPosition;
}
public static void moveToRightOne (String[] names, int startSpot, int endSpot) {
for (int i = (endSpot - 1); i >= startSpot; i--) {
names[i+1] = names[i];
}
}
public static void main(String[] args) {
String[] original = new String[] { "bob", "joe", "aaron", "zac"};
for (String s: original) System.out.println(s);
System.out.println();
moveName(original);
for (String s: original) System.out.println(s);
}
}
import java.util.Arrays;
public class Test{
Public static void main(String args[]){
String str[]= {'Mike','Adam','Peter','Brian'};
System.out.println("str"+str[0]); // Mike
Arrays.sort(str);
System.out.println("str"+str[0]); //Adam
}
}