鐵之狂傲

標題: 關於JAVA程式語言 [列印本頁]

作者: 盛夏的果實    時間: 05-4-22 00:23
標題: 關於JAVA程式語言
實在是看不懂....
我設一個陣列.並且要讓裡面數字出現隨機排列

public class test {
   public static void main(String[ ]args) {
     int list[]={85,90,86,74,83,99,97,89};
       int i,j,x;
     for (i = 0;i < 8;i++) {
       j = (int) (Math.random()*8);
     x = list;
    list = list[j];
    list[j] = x;
       }
   String str = " ";
    for (i = 0;i < 8;i++) str += String.valueOf(list)+" ";
      System.out.println(str);
   }
}


我是都看的懂拉!
只是我不明白
     x = list;
    list = list[j];
    list[j] = x;
這3行的意思.
如果是說要把 i 設定為陣列中.從第一個到最後一個
然後 j 是要隨機取出.
然後要讓 i = j .是因為要從陣列第一個到最後一個隨機取出的意思.
那為何要設一個x勒?
我試過只打
list = list[j];
所出現的數字會重複出現.
也就是說陣列中的85可能出現2次以上.
如果只打
list = list[j] = x;
效果一樣
如果這樣打
     x = list;
    list[j] = list[i];
    list[j] = x;
也會重複出現.
所以我想問一下.
x的用意何在.
他門之間關係為何阿?
作者: 墮夜    時間: 05-4-22 00:46
標題: 回覆: 關於JAVA程式語言
假設你把X刪除後不影響程式運作的話

那麼X便沒有意義
作者: 盛夏的果實    時間: 05-4-22 01:12
標題: 回覆: 關於JAVA程式語言
[QUOTE='墮夜']假設你把X刪除後不影響程式運作的話

那麼X便沒有意義[/QUOTE]

所以我才想知道X的用意阿...
因為不能少他...
但是程式想要把陣列內數字隨機排序.
所以要
list = list[j];
但是這樣數值會出現重複.
那如果
list = list[j]會出現重複.
那為什麼
x = list;
list = list[j];
list[j] = x;
這樣就不會重複了呢?
另外.
如果list=list[j]
那list[j]不就也等於list嗎?
可是程式裡我打
x = list;
list[j] = list[i];
list[j] = x;
卻也會重複....
以上...
作者: 橘夢日記    時間: 05-4-22 10:49
標題: 回覆: 關於JAVA程式語言
先請問一個小問題...
在您的目前觀念中(直覺的)....
list 與 list[j] 是不同的陣列或者是同一個陣列?
----------------------------------------------------------------------------------
Q1:
X的用意
x = list;
list = list[j];
list[j] = x;

list 與 list[j] 指的是同一個陣列吧?好...假設它們是同一個好了.....
我們以 i 代表 85, j 代表89(陣列中的頭,尾)...請問....要如何交換它們兩個??
沒錯....需要一個暫時的容器(變數)"X".
否則....將會產生覆蓋的情況(頭蓋尾或尾蓋頭)

Q2:
list = list[j] = x;

這一行...有點怪....(覺得它是錯的....但不敢肯定)(因為橘子不懂程式)
這一行的意思應該是....將 X 指定給 list[j],然後將 list[j] 指定給 list
假設它取代 Q1 中的第1,2行...請問..."X"是多少?,未指定初值可能為任意數...
程式跑出來的答案...對了...純粹巧合....錯了...是正常的....
如果是取代 Q1 中的第2,3行....答案可能是對的...但應該還是錯的....
連同第一行看....會發現怪怪地...
x = list; //把 list丟給 X
list = list[j] = x;//STEP1:把X丟給list[j]....嗯...list[j]原本的值去哪了??
         //STEP2:把 list[j]丟給list....(驚)
         這...list[j]不就是 X.....而X不就是 list....怪怪的對吧!

Q3:
x = list;
list[j] = list[i];
list[j] = x;

請看第二行....將 list丟給list[j]
問題來了...list[j]的值去哪了??
第三行...將X丟給list[j]....(和第二行沒啥不同不是)

Q4:
如果
list = list[j]會出現重複.
那為什麼
x = list;
list = list[j];
list[j] = x;
這樣就不會重複了呢?

如果這樣打
x = list;
list[j] = list[i];
list[j] = x;
也會重複出現.

因為...(給您自己想如何....)
-------------------------------------------------------------------------------------
另...覺得...您對 = 這個運算的解釋似乎偏向"等於"(由您的問題點所感受到的感覺...)
(橘子相信您清楚它的使用...可能是不自覺下的結果...)
記得..指定運算...都是由右方指定給左方的不是...您的問題點似乎出在指定運算的理解錯誤上.
在此提供您個人的方法供您參考...

橘子是以""來稱乎它....比如:

X=Y;  // X為Y

而不是 Y指定給 X,或 X 等同 Y(好難記,好詏口,誰想出來的...怪~)
覺得這樣比較不會和 == (等於)弄混,也比較好唸,好記.


最後...橘子不懂程式(認真)...有犯冒之處望請海涵...
有錯...就當橘子是來耍白痴的好了...
作者: 盛夏的果實    時間: 05-4-22 16:46
標題: 回覆: 關於JAVA程式語言
[QUOTE=橘夢日記]先請問一個小問題...
在您的目前?與 list 是不同的陣列或者是同一個陣列?
----------------------------------------------------------------------------------
Q1:
list 與 list 指的是同一個陣列吧?好...假設它們是同一個好了.....
我們以 i 代表 85, j 代表89(陣列中的頭,尾)...請問....要如何交換它們兩個??
...『刪除過多引言』[/QUOTE]



喔!
對我太有幫助了.
暫存阿?
恩~原來如此.
難怪會被它蓋過去.
大大你程式學的好強阿!
受小弟一拜.
看來我打的程式還不夠!
回家再去多練習~"~

燃燒生命!~~~~~~~

謝謝唷!
以後有問題還得靠你!
多多指教!
作者: dou    時間: 05-4-23 00:39
標題: 回覆: 關於JAVA程式語言
只是要打亂數字, 還有別的方法:
先把數字加到 Vector 裡, Random 取出其中一個, 放到另外一個 Vector 裡
原先有數字的 Vector 資料被取完之後, 結果就是打亂過的 Vector

  1. import java.util.*;
  2. public static void main( String argv[] )
  3. {
  4.   Vector data = new Vector();
  5.   Vector result = new Vector();
  6.   Random random = new Random();
  7.   int list[] = { 85, 90, 74, 83, 99, 97, 89 };
  8.   for( int i = 0 ; i < list.length ; i++ )
  9.   {
  10.          data.add( new Integer(list[i]) );
  11.   }
  12. //
  13. // 邏輯只有這一個 while 而已..
  14. //
  15.   while( !data.isEmpty() )
  16.   {
  17.         result.add(
  18.           data.remove( random.nextInt( data.size() ) )
  19.         );
  20.   }
  21.   System.out.println( "Randomized output: " );
  22.   for( Enumeration e = result.elements() ; e.hasMoreElements() ; )
  23.   {
  24.          System.out.print( e.nextElement() + " " );
  25.   }
  26.   System.out.println();
  27. }
複製代碼





歡迎光臨 鐵之狂傲 (https://www.gamez.com.tw/)