创建一个从 1 到 10 的随机数字数组.然后,在 java 中将所有 7 移动到数组的前面



创建一个从1到10的随机数字数组。然后,将所有 7 移到前面 的数组。其他数字的顺序并不重要,只要所有数字都遵循幸运 7 组即可。查看插入排序和选择排序的代码可能对此分配非常有帮助。Arrays.toString(( 也将很有用。 例如,如果您得到列表:: 4 5 6 7 1 2 3 7 列表可以变成 - 所有 7 都必须是第一个 :: 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));
}
}

这个程序给了我错误 请任何人告诉我,我使用正确的方法来解决这个问题。如果我对此问题使用了错误的方法,请使用正确的方法解决此问题。

这是我解决问题的方式,我为代码制作了两个单独的类 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)));
}
}

您的逻辑中存在多个不准确之处,我已经修复了代码,以下内容应该可以解决您的问题

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;
}
}

问题出在NumberShifter

int originalArray[] = new int[index];
int valueBeingMoved = originalArray[index];

您正在创建一个大小为[index]的数组。假设index = 7,因此它的索引值为 0, 1, 2...6 但是在下一行中,您将访问不存在的originalArray[index](originalArray[7](。 所以你得到了例外。

除此之外,您的代码还有其他问题。

我想建议这个非常简单的方法:

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(。

最新更新