虽然循环被绕过?

时间:2012-08-29 18:41:34

标签: java while-loop

所以我是comp sci的第一年学生,我必须创建一个程序,让一个数组扰乱它,然后再对它进行排序。我几乎让它工作,但由于某种原因,我的一个while循环将无法工作,并完全被绕过。我真的很陌生,所以所有的帮助都表示赞赏。我排序,打印工作,争抢只是给我一些麻烦。

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

    }

3 个答案:

答案 0 :(得分:6)

t=false将值false分配给t并评估为新值。因此,您刚刚撰写了while (false)

比较平等时,您需要使用==

但是,对于布尔值,使用while (!t)的风格要好得多。由于缺少第二个=,因此更具可读性且不太可能出错。

答案 1 :(得分:2)

一个等号:x = 4用于为变量赋值。

两个等号:x == 6用于测试变量是否等于值。


if语句中的某些语法是非正统的。

这很奇怪

if (! (u==true))

您可以改用:

if (!u)

更好的是,您可以使用描述性变量名称,使其更具可读性:

if (!found) {
    shuffleItems();
}

请注意它的可读性:如果找不到,则随机播放项目。

现在你的代码记录了自己!

答案 2 :(得分:0)

使用:

while (! t){

请记住使用==来比较值:)