4

つまり、私はコンプ科学の 1 年生で、配列をスクランブルしてから再度並べ替えるプログラムを作成する必要があります。私はほとんどそれを機能させましたが、何らかの理由で、while ループの 1 つが機能せず、完全にバイパスされます。私はこれに本当に慣れていないので、すべての助けに感謝します。並べ替えがあり、印刷が機能していますが、スクランブルが問題を引き起こしています。

import java.io.*;
import java.util.Random;
public class Driver03
    {
     public static void main(String[] args)
      {
        int[] array = {100, 101, 102, 103, 104, 105, 106, 107, 108, 109};
        print(array);
        array = scramble(array);
        print(array);
        array = sort(array);
        print(array);
      }
      public static void print(int[] apple)
        {
            for(int x = 0; x < apple.length; x++){
                System.out.println(apple[x]+"");
                }
        }
      public static int max;
      public static int maxIndex;
      public static int temp;
      public static int[] sort(int[] grape)
        {
            for(int y = grape.length; y > 0; y--){
            for(int x = 0; x < y; x++)
              if (x==1){
                    if (grape[x] > grape[x-1]){
                        max = grape[x];
                        maxIndex = x;
                        }
                    else{
                        max = grape[x-1];
                        maxIndex = x - 1;
                        }
                    }
                 else{
                    if (grape[x] > max){
                        max = grape[x];
                        maxIndex = x;
                        }
                    }
                 temp = grape[maxIndex];
                 grape[maxIndex] = grape[y-1];
                 grape[y-1] = temp; 
                }
            return grape;
        }
     public static int temp1;
     public static boolean t;
     public static boolean u;
     public static int[] numbers;
     public static int[] tangerine;
     public static int[] scramble(int[] orange)
        {
        numbers = new int[10];
        tangerine = new int[10];
        Random rand=new Random();

        for(int x = 0; x < orange.length; x++){
            t=false;
            while (t=false){ //For some reason being bypassed
                int randn = rand.nextInt(9);
                for(int y = 0; y < numbers.length; y++){
                    if (numbers[x]==randn)
                        u = true;
                    }
                if (! (u==true))
                    {
                    numbers[randn] = randn;
                    tangerine[randn] = orange[x];
                    t = true;
                    }
                }           
            }
          return tangerine;
        }

    }
4

3 に答える 3

6

t=falsefalseに値が割り当てられt、新しい値に評価されます。したがって、あなたはちょうど書いwhile (false)た.

等値を比較するときは、 を使用する必要があります==

ただし、ブール値の場合は、 をそのまま使用する方がはるかに優れたスタイルwhile (!t)です。これにより、読みやすくなり、秒の欠落が原因でエラーが発生する可能性が低くなり=ます。

于 2012-08-29T18:59:46.880 に答える
2

1 つの等号:x = 4変数に値を割り当てるために使用されます。

2 つの等号:x == 6変数が値と等しいかどうかをテストするために使用されます。


if ステートメントの構文の一部が正統ではありません。

これは非常に奇妙です

if (! (u==true))

代わりにこれを使用できます:

if (!u)

さらに良いことに、わかりやすい変数名を使用して、より読みやすくすることができます。

if (!found) {
    shuffleItems();
}

それがどれほど読みやすいかに注意してください:見つからない場合は、アイテムをシャッフルします。

これで、コード自体が文書化されました。

于 2012-08-29T18:59:28.310 に答える
0

使用する:

while (! t){

そして、値を比較するために == を使用することを忘れないでください:)

于 2012-08-29T18:53:29.773 に答える