创建一个从1到10的随机数组。然后,将所有的7移到数组的前面。其他数字的顺序并不重要,只要所有数字都跟随幸运7的组。查看插入、排序和选择排序的代码可能对此任务非常有帮助。Arrays.toString()也会很有用。例如,如果给出列表::4 5 6 7 1 2 3 7,则列表可能变成-所有7都必须是first ::7 7 6 4 1 2 3 5
我的代码:
public class NumberShifter
{
public int[] go(int[] arrayToBeShifted, int index)
{
int originalArray[] = new int[index];
int valueBeingMoved = originalArray[index];
for (int i = index; i > 0; i--)
{
arrayToBeShifted[i] = arrayToBeShifted[i-1];
}
arrayToBeShifted[0] = valueBeingMoved;
return arrayToBeShifted;
}
}跑步者:
class Main
{
public static void main(String[] args)
{
int random[] = new int[10];
for(int i=0; i<random.length; i++)
{
random[i] = (int)(Math.random()*6)+1;
}
NumberShifter rt = new NumberShifter();
System.out.println(rt.go(random,7));
System.out.println(rt.go(random,7));
System.out.println(rt.go(random,7));
System.out.println(rt.go(random,7));
}
}这个程序给了我错误请任何人告诉我我使用了正确的方法来解决这个问题。如果我在这个问题上用了错误的方法,请用正确的方法解决。
发布于 2020-01-31 05:24:42
这就是我解决问题的方法,我为代码创建了两个独立的类runner和main。
我的代码:
public class NumberShifter
{
public int[] go(int[] arrayToBeShifted, int index)
{
for (int i = 0, e = 0; i < arrayToBeShifted.length; i++)
{
if (arrayToBeShifted[i] == 7)
{
arrayToBeShifted[i] = arrayToBeShifted[e];
arrayToBeShifted[e] = 7;
e++;
}
}
return arrayToBeShifted;
}
}跑步者:
class Runner
{
public static void main(String[] args)
{
NumberShifter rt = new NumberShifter();
//demo to see if code works
System.out.println(java.util.Arrays.toString(rt.go(new int[]{1, 10, 9, 2, 8, 2, 5, 6, 10, 7, 9, 8, 6, 7, 2, 7, 6, 10, 5, 3},7)));
//random arrays according to question
int random[] = new int[20];
for(int i=0; i<random.length; i++)
{
random[i] = (int)(Math.random()*10)+1;
}
System.out.println(java.util.Arrays.toString(rt.go(random,7)));
System.out.println(java.util.Arrays.toString(rt.go(random,7)));
System.out.println(java.util.Arrays.toString(rt.go(random,7)));
}
}发布于 2020-01-29 11:36:32
问题出在NumberShifter
int originalArray[] = new int[index];
int valueBeingMoved = originalArray[index];您正在创建一个大小为[index]的数组。假设是index = 7,因此它的索引值为0、1、2…6,但是在下一行中,您访问的是不存在的originalArray[index] (originalArray7)。所以你得到了异常。
除此之外,您的代码还存在其他问题。
我想建议这个非常简单的方法:
public class Main {
public static void main(String[] args) {
int random[] = {4, 7, 6, 5, 7, 8, 0, 7, 1, 7};
printArray(random);
move7sToFirst(random);
printArray(random);
}
public static void move7sToFirst(int[] random) {
for (int i = 0; i < random.length; i++) //traverse array to find 7s
if (random[i] == 7) //if 7 found
for (int j = 0; j < i; j++) //traverse from beginning to index before 7 to find non-7
if (random[j] != 7) //if non-7 found
swap(random, i, j); //swap 7 with non-7
}
public static void swap(int[] random, int index1, int index2) {
int temp = random[index1];
random[index1] = random[index2];
random[index2] = temp;
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + " ");
System.out.println("");
}
}输出:
4 7 6 5 7 8 0 7 1 7
7 7 7 7 4 6 5 8 0 1 当然,这是最简单的方法,时间复杂度为O(n^2)。这可以通过为下一次迭代记住索引来改进,并且可以显着降低时间复杂度,几乎可以将其提高到O(n)。
发布于 2020-01-29 11:42:41
在您的逻辑中有多个不准确的地方,我已经修复了代码,下面应该可以解决您的问题
public class NumberShifter{
public static void main(String[] args){
int[] array = {7,7,1,1,2,3,4,7,7,7,5,7};
for(int i=0;i<array.length;i++){
System.out.print(" "+array[i]);
}
shift7s(array);
System.out.println("\n");
for(int i=0;i<array.length;i++){
System.out.print(" "+array[i]);
}
}
public static void shift7s(int[] array) {
int i = 0;
int j = array.length -1;
while(i < j){
i = getIndexOfNextNonSeven(array, i);
j = getIndexOfNextSeven(array, j);
if(i == array.length || j < 0) break;
if(i < j){
swap(array, i, j);
}
}
}
private static int getIndexOfNextNonSeven(int[] array, int currentIndex){
while(currentIndex < array.length &&
array[currentIndex] == 7 ){
currentIndex++;
}
return currentIndex;
}
private static int getIndexOfNextSeven(int[] array, int currentIndex){
while(currentIndex < array.length &&
array[currentIndex] != 7 ){
currentIndex--;
}
return currentIndex;
}
private static void swap(int[] array, int p1, int p2){
int temp = array[p1];
array[p1] = array[p2];
array[p2] = temp;
}
}https://stackoverflow.com/questions/59959919
复制相似问题