廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3771 個閱讀者
 
<<   1   2  下頁 >>(共 2 頁)
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
ezlovekbm 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x3
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[Java] 我們期末考要考2維陣列有大大可以交一下嗎??
首先老師會請你印出你的學號跟姓名

第二步會請你印出"未排序的資料"

第三步會請你印出"指定科目的排序"

期末考題型 我看不太懂2維的泡沫排序

可以請大大指點一下 謝謝 大概還會有啥變化

老師說這題會了就差不多了

public class D950104{
public static void main (String[] args){
double week [] []={{18.2,17.3,15.0,13.4,0},
{23.8,25.1,20.6,17.8,0},
{20.6,21.5,18.4,15.7,0}}; //所輸入的質,後面之所以會多各0是為了補足AVG/4的不足
String n[] ={"早上","中午","晚上"};
boolean flag=true;
double temp=0;
String tempstring;
System.out.println("未排序");
System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+"\t"+"星期四"+"\t"+ ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



[ 此文章被ezlovekbm在2006-01-15 11:43重新編輯 ]



獻花 x0 回到頂端 [樓 主] From:APNIC | Posted:2006-01-15 01:42 |
pt730907
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x26 鮮花 x99
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

所以你到底想問的是第幾步?
第一步、第二步還是第三步?
還是通通都不會?
請把想問的問題說清楚....
你說看不太懂2維的泡沫排序
那首先要先了解的就是泡沫排序的定義....
什麼是泡沫排序呢?
下面這個投影片有相關介紹:
投影片
PS:建議你將程式碼用[ code][ /code](請看論壇語法)這樣程式碼比較清楚....


獻花 x0 回到頂端 [1 樓] From:台灣中華電信 | Posted:2006-01-15 02:28 |
pt730907
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x26 鮮花 x99
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

這是將你的程式改寫過後的程式碼
應該是你想要的結果....
我加上註解了
希望你能看的懂我的解釋.....

只是老實說我覺得我寫的程式碼不夠好...
請各位先賢前輩多多指教嚕.... 表情
小弟獻醜了..... 表情

複製程式
public class D950104
{
    private static double week [][]={{18.2,17.3,15.0,13.4,0},//所輸入的值,後面之所以
                                     {23.8,25.1,20.6,17.8,0},//會多個0是為了補足AVG/4的不足
                                     {20.6,21.5,18.4,15.7,0}};
    public static int i1=0;       //用來控制平均氣溫之印出位置
    private static double  avg = 0; //宣告平均數
    public static void out(String []k)
       {
           int i,j,s;
           for(i=0,s=0;i<week.length && s<k.length;i++,s++)
           {
                  System.out.print(k[s] + "\t");
                  for(j=0;j<=week.length;j++)
                  { 
                    System.out.print(week[ i ][j]+"\t");                    
                    calculate(week[ i ][j],j,i);//呼叫函式進行計算     
                  }  
           }
       }
    public static void calculate(double cal,int check1,int check2)//計算平均數
    {           
           avg = avg + cal; //平均數的加總
           if(check1==week.length && check2!=week.length)//控制何時該呼叫函式進行印出
           {                                             //並進行換行以排版
                  outavg(check1);       //呼叫函式進行印出平均數
                  System.out.println();//換行
           }
    }
    public static void outavg(int aj)       //印出平均數
    {
           week[i1][aj+1] = avg/4;
           System.out.print(Math.round(week[i1][aj+1]*1000)/1000.0+"\t");//四捨五入到小數點三位
           i1++;
           avg=0;
    }
    public static void sort()                     //進行氣泡排序
    {
           int k,l;
           for (k=0;k<week.length;k++)
           { 
                         for (l=0;l+1<=week.length;l++)
                         {
                                if (week[k][l]>week[k][l+1])//當原數值大於後數值時
                                {                           //進行交換
                                       double tempstring=week[k][l];
                                       week[k][l] = week[k][l+1];
                                       week[k][l+1] = tempstring;
                                }
                         }                  
           }
           k=0;l=0;
           if(week[k][l]>week[k][l+1])           //如果最小值不在最左邊的話就遞迴
           {sort();}
           else
           {System.out.println();}               //符合情況時空行
    }
       public static void main (String[] args)
       {
          String n[] ={"早上","中午","晚上"};
          System.out.println("未排序");
          System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+
          "\t"+"星期四"+"\t"+"平均氣溫");
          System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"
          +"\t"+"------"+"\t"+"--------");           
          out(n);              //呼叫函式進行排序前印出
          sort();              //呼叫函式進行排序
          System.out.println("排序後");
          System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+
          "\t"+"星期四"+"\t"+"平均氣溫");
          System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"
          +"\t"+"------"+"\t"+"--------");     
          i1=0;              //重新初使化,為了印出排序過後的平均氣溫
          out(n);              //呼叫函式進行排序後印出
       }
} 


[ 此文章被pt730907在2006-01-16 11:44重新編輯 ]


獻花 x0 回到頂端 [2 樓] From:台灣中華電信 | Posted:2006-01-15 06:34 |
ezlovekbm 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x3
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

這段程式碼我看不太懂

可以請大大指點一下嗎 謝謝...



複製程式
 for (int i=week.length-2;i>=0;i--){  //這邊我忘記了,為什麼要-2,至於--的話,是要往回找
        for (int j=0;j<=i;j++){
         if (week[j][4]>week[j+1][4])
         {
          for (int k=0;k<week[j].length;k++){   //這一各回圈是宣告比較的,不然要寫很多行
           temp=week[j][k];
              week[j][k]=week[j+1][k];
           week[j+1][k]=temp;
          }
          tempstring=n[j];  //tempstring是宣告給N用的
          n[j]=n[j+1];
          n[j+1]=tempstring;
          
     


獻花 x0 回到頂端 [3 樓] From:APNIC | Posted:2006-01-15 11:42 |
pt730907
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x26 鮮花 x99
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

把你的程式碼跑過一遍後...
才知道你想要的泡沫排序法是判斷平均氣溫的高低來作為
陣列元素兩兩交換的依歸....
我把解釋標記在註解裡....
還有這邊給你一點點小建議
就是最好不要主程式(main)就包含了所有的功能...
換句話說,你應該另外宣告一些方法(method)來分別負責處理各自的功能....
以你這個例子來說,可以宣告三個方法:一個負責印出、一個負責排序、一個負責計算平均數....
可視需要另行增加
而main函式主要是用來呼叫其他方法....
這樣發生錯誤時也比較容易偵錯...
且別人也比較能夠看懂你的程式碼....

複製程式
for (int i=week.length-2;i>=0;i--){  //設成length-2原因是為了要先讓第二陣列之平均氣溫
     for (int j=0;j<=i;j++){              //和最後陣列之平均氣溫相比較,至於--的話,是要往回找
       if (week[j][4]>week[j+1][4])              //如原平均氣溫大於後平均氣溫
       {
         for (int k=0;k<week[j].length;k++){//則兩兩陣列全部元素進行交換
         temp=week[j][k];
         week[j][k]=week[j+1][k];
         week[j+1][k]=temp;
       }
       tempstring=n[j];  //交換時段
       n[j]=n[j+1];
       n[j+1]=tempstring;
     }
}


獻花 x0 回到頂端 [4 樓] From:台灣中華電信 | Posted:2006-01-15 15:24 |
pt730907
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x26 鮮花 x99
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

這是我把我的程式碼修改成你的學校所要求的結果....
程式執行結果和你的程式碼執行結果一模一樣...
只是唯一的差別是在於我的程式具有物件導向的觀念
也就是說每個方法都負責各自的功能...
不會只交由main函式處理....
感覺起來也比較清楚....
複製程式
public class D950104
{
    private static double week [][]={{18.2,17.3,15.0,13.4,0},//所輸入的值,後面之所以
                                     {23.8,25.1,20.6,17.8,0},//會多個0是為了補足AVG/4的不足
                                     {20.6,21.5,18.4,15.7,0}};
    public static int i1=0;       //用來控制平均氣溫之印出位置
    private static double  avg = 0; //宣告平均數
    public static void out(String []k)
       {
           int i,j,s;
           for(i=0,s=0;i<week.length && s<k.length;i++,s++)
           {
                  System.out.print(k[s] + "\t");
                  for(j=0;j<=week.length;j++)
                  { 
                    System.out.print(week[ i ][j]+"\t");                    
                    calculate(week[ i ][j],j,i);//呼叫函式進行計算     
                  }  
           }
       }
    public static void calculate(double cal,int check1,int check2)//計算平均數
    {           
           avg = avg + cal; //平均數的加總
           if(check1==week.length && check2!=week.length)//控制何時該呼叫函式進行印出
           {                                             //並進行換行以排版
                  outavg(check1);       //呼叫函式進行印出平均數
                  System.out.println();//換行
           }
    }
    public static void outavg(int aj)       //印出平均數
    {
           week[i1][aj+1] = avg/4;
           System.out.print(week[i1][aj+1]+"\t");
           i1++;
           avg=0;
    }
    public static void sort(String []t)                     //進行氣泡排序
    {
           int k,l;
           int z=0;
           for (k=0;k<week.length;k++)
           { 
                         for (l=k;l+1<week.length;l++)
                         {
                                if (week[l][4]>week[l+1][4])//當原數值大於後數值時
                                {                           //進行交換                                       
                                          while(z<=week.length+1)
                                          {
                                                        double tempstring=week[l][z];
                                                        week[l][z] = week[l+1][z];
                                                        week[l+1][z] = tempstring;
                                                        z++;
                                          }
                                          String swap = t[l];       //進行時段交換
                                          t[l] = t[l+1];
                                          t[l+1] = swap;
                                }
                                z=0;
                         }                  
           }
             k=0;l=0;
             if(week[l][4]>week[l+1][4])           //如果最小值不在最左邊的話就遞迴
             {sort(t);}
             else
             {System.out.println();}               //符合情況時空行
    }
       public static void main (String[] args)
       {
          String n[] ={"早上","中午","晚上"};
          System.out.println("未排序");
          System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+
          "\t"+"星期四"+"\t"+"平均氣溫");
          System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"
          +"\t"+"------"+"\t"+"--------");           
          out(n);              //呼叫函式進行排序前印出
          sort(n);              //呼叫函式進行排序
          System.out.println("排序後");
          System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+
          "\t"+"星期四"+"\t"+"平均氣溫");
          System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"
          +"\t"+"------"+"\t"+"--------");     
          i1=0;              //重新初使化,為了印出排序過後的平均氣溫
          out(n);              //呼叫函式進行排序後印出
       }
} 


獻花 x0 回到頂端 [5 樓] From:台灣中華電信 | Posted:2006-01-15 16:13 |
ezlovekbm 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x3
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

大大你太厲害了 我是初學者 太深奧都看不太懂 一維我會排序 可是2維我就不懂

像這題是早中晚排序排完變早晚中 如果要橫的的排序要如何排序

未排序是               排序後
早18.2,17.3,15.0,13.4,   早13.4,15.0,17.3,18.2
中23.8,25.1,20.6,17.8   中17.8,20.6,23.8,25.1
晚20.6,21.5,18.4,15.7   晚15.7,18.4,20.6,21

這樣可以嗎 希望大大能指點我一下謝謝


獻花 x0 回到頂端 [6 樓] From:APNIC | Posted:2006-01-15 17:26 |
pt730907
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x26 鮮花 x99
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

請看三樓我PO的程式碼....
跑出來的結果正是橫的排序的結果....


獻花 x0 回到頂端 [7 樓] From:台灣中華電信 | Posted:2006-01-15 20:07 |
ezlovekbm 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x3
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

謝謝大大的不吝嗇指點...


獻花 x0 回到頂端 [8 樓] From:APNIC | Posted:2006-01-16 08:20 |
ezlovekbm 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x3
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

可以幫我看一下排序那一部分未啥不能排序 謝謝
複製程式
public class E9430068{
 public static void main (String[] args){
       double week [] []={{18.2,17.3,15.0,13.4,0},
                      {23.8,25.1,20.6,17.8,0},
                      {20.6,21.5,18.4,15.7,0}};  //所輸入的質,後面之所以會多各0是為了補足AVG/4的不足
       String n[] ={"早上","中午","晚上"};
       
       System.out.println("未排序");
       System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+"\t"+"星期四"+"\t"+"平均氣溫");
       System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"+"\t"+"------"+"\t"+"--------");
       for(int i=0;i<week.length;i++){
        double avg=0;  //先宣告平均數
        System.out.print(n[i]+"\t");
        for(int j=0;j<week[i].length-1;j++){   //因為前面有字串有補0,所以要減回來
         System.out.print(week[i][j]+"\t");
         avg+=week[i][j];  //宣告平均數的加總        
        }        
        week[i][4]=avg/4;
        System.out.println(week[i][4]);   //avg/ 後面為天數
       }
       for (int k=week.length-1;k>=0;k--)
        {
           for (int l=0;l<k;l++)
           {                         
                if (week[k][l]>week[k][k+1])//當原數值大於後數值時
                {                           //進行交換
                           double temp=week[k][l];
                                  week[k][l] = week[k][l+1];
                                  week[k][l+1] = temp;
                                             
                                }
                     }             
        } 
          
       System.out.println();  //此為空行
       System.out.println("排序後");
       System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+"\t"+"星期四"+"\t"+"平均氣溫");
       System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"+"\t"+"------"+"\t"+"--------");       
       
       for (int k=0;k<week.length;k++){
       System.out.print(n[k]+"\t");
       for (int l=0;l<week[k].length;l++)        
       System.out.print(week[k][l]+"\t");
       System.out.println();
    }                         
  }
} 


獻花 x0 回到頂端 [9 樓] From:APNIC | Posted:2006-01-16 13:49 |

<<   1   2  下頁 >>(共 2 頁)
首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.073161 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言