簡體   English   中英

移位數組。 輸出不正確。

[英]Shifting an array. Output is not correct.

我一直在研究此程序,並將向用戶顯示數組內容,並詢問他想從數組的右側移出多少個位置並替換到左側的位置。

應該是這樣的:

Array contents:   1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
Shift how many positions? 5

Array contents:  11 12 13 14 15  1  2  3  4  5  6  7  8  9 10
Shift how many positions? 2

Array contents:   9 10 11 12 13 14 15  1  2  3  4  5  6  7  8
Shift how many positions? 0

Array contents:   9 10 11 12 13 14 15  1  2  3  4  5  6  7  8
Shift how many positions? -8

Array contents:   2  3  4  5  6  7  8  9 10 11 12 13 14 15  1
Shift how many positions? 15

Array contents:   2  3  4  5  6  7  8  9 10 11 12 13 14 15  1
Shift how many positions? 17

Array contents:  15  1  2  3  4  5  6  7  8  9 10 11 12 13 14
Shift how many positions? q

我得到這個:

Array Contents: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 

Shift how many positions?5
Array Contents: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 

這是主要的類:

public class Shift1 {

     /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

            Scanner kp = new Scanner(System.in);

                final int size = 15;
        char q = 'y';
        boolean flag = false;

        Shifter test = new Shifter(size);

        test.display();
        System.out.println();


            Scanner input = new Scanner(System.in);
            System.out.print("Shift how many positions?");{

            int value1 = input.nextInt();
            test.shift(value1);
            test.display();
        }
    }
}

這是附加的類:

public class Shifter 
{

public int [] data=new int[15];
    public Shifter()
    {
        int size=0;
}

public Shifter(int size){

    for (int i = 0; i < data.length; i++)
    {
        Random r = new Random(15);
        int second = r.nextInt(15) + 1;
        int temp = data[i];
        data[i] = data[second];
        data[second] = temp;
    }
}

public void shift(int pos){ 
    for(int x=0; x<pos; x++)
    {
        int cnt = data.length-1;
        int temp = data[cnt];
        for(cnt=data.length-1; cnt>0; cnt--)
    { 
        data[cnt] = data[cnt]-1;
    }
        data[0] =temp;
    }
}
public void display(){
    String values = "";
        for (int i = 0; i < data.length; i++)
        {
          if (i < 15)
        {
          values += (i + 1);
           if (i < 14)
        {
          values += ", ";
        }
    }
}
        System.out.printf("Array Contents: %s \n", values);
    } }
for(int x=0; x<pos; x++) {
    int cnt = data.length-1;
    int temp = data[cnt];

    for(cnt=data.length-1; cnt>0; cnt--) { 
        data[cnt] = data[cnt]-1;
    }
    data[0] =temp;
}

在您的shift方法中,您應該將x用於循環變量。 無論如何, cnttemp始終相同。 因此,您在此循環中實際上沒有做任何事情。

如果允許使用Array以外的其他東西,也許可以看看使用List 它具有獨特的方法,例如

http://docs.oracle.com/javase/7/docs/api/java/util/List.html#add(int,%20E)

這將允許您在0索引處添加一個數字,並將自動將現有值右移。 所以彈出關閉端的值,並且將其移動到前size的倍量。

  • main()方法中引入一個循環。
  • 首先以字符串形式讀取以識別q
  • 正確實現Shifter.shift()
  • 在提示后添加一個空格。
  • 正確初始化陣列。
  • 正確實現Shifter.display()

更正的代碼:

public static void main(String[] args) {

    Scanner kp = new Scanner(System.in);

    final int size = 15;
    char q = 'y';
    boolean flag = false;

    Shifter test = new Shifter(size);
    Scanner input = new Scanner(System.in);

    for(;;) {
        test.display();
        System.out.println();
        System.out.print("Shift how many positions? ");

        String value = input.next();
        if (value.equals("q")) break;
        int value1 = Integer.parseInt(value);
        test.shift(value1);
    }
}

public Shifter(int size){

    for (int i = 0; i < data.length; i++)
    {
        data[i] = i + 1;
    }
}

public void shift(int pos){
    int max = pos % data.length;
    if (max < 0) max += data.length;
    for (int x=0; x<max; x++)
    {
        int cnt = data.length-1;
        int temp = data[cnt];
        for(cnt=data.length-1; cnt>0; cnt--)
        { 
            data[cnt] = data[cnt-1];
        }
        data[0] =temp;
    }
}
public void display(){
    String values = "";
    for (int i = 0; i < data.length; i++)
    {
        values += " ";
        if (data[i] < 10) values += " ";
        values += data[i];
    }
    System.out.printf("Array Contents: %s \n", values);
}

盡管還有很多要改進的地方,但是您可以這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM