找回密碼
 註冊

JAVA程式分享(使用陣列存放學生成績,並畫出學生成績橫條圖)

来源: 新聞 跑山的節奏 2011-11-7 12:35 只看這個作者 |閱讀模式
11 10204
本文最後由 編輯部女孩 於 2016-7-15 17:25 編輯

import java.util.*;
public class Java {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入學生人數(最多50人):");
        int people = scanner.nextInt();
        //宣告第一個陣列,陣列個數=學生人數
        int ary[] = new int[people];
        System.out.println("請輸入學生分數");
        //利用迴圈把學生分數存到陣列裡
        for (int i = 0; i < ary.length; i++) {
            System.out.print("第"+(i+1)+"位:");
            ary[ i ]=scanner.nextInt();
        }
        //宣告第二個陣列,用來畫成績橫條圖用,因為事先知道陣列的內容,所以直接輸進去
        String distribution[]={
            "100:",
            "90~99:",
            "80~89:",
            "70~79:",
            "60~69:",
            "50~59:",
            "40~49:",
            "30~39:",
            "20~29:",
            "10~19:",
            "0~9:"
        };
        //使用for-each迴圈讀取ary陣列內的所有資料
        for(int achievement : ary ){
            /**下switch-case判斷ary陣列內的資料是屬於那一個成績範圍
               其實用if-else也可以做得到.
               PS 每一個case裡面一定要下break 或是 continue **/
            switch(achievement/10){
                case 10:
                    distribution[0]+="=";
                    break;
                case 9:
                    distribution[1]+="=";
                    break;
                case 8:
                    distribution[2]+="=";
                    break;
                case 7:
                    distribution[3]+="=";
                    break;
                case 6:
                    distribution[4]+="=";
                    break;
                case 5:
                    distribution[5]+="=";
                    break;
                case 4:
                    distribution[6]+="=";
                    break;
                case 3:
                    distribution[7]+="=";
                    break;
                case 2:
                    distribution[8]+="=";
                    break;
                case 1:
                    distribution[9]+="=";
                    break;
                default:
                    distribution[10]+="=";
            }
        }
        System.out.println("==成績分布橫條圖==");
        //輸出distribution陣列的所有資料
        for(String dis : distribution)
        System.out.println(dis);
    }
}
=========================
最近會慢慢練習一些書上的習題
順便把程式碼分享給有需要的人
不過這些都是很基礎的東西
JAVA的核心是物件導向
所有的東西都可以當物件
也歡迎有興趣的人一起分享程式碼
=============================
另外一種做法
import java.util.*;
public class Java {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入學生人數(最多50人):");
        int people = scanner.nextInt();
                //宣告第一個陣列,陣列個數=學生人數
        int ary[] = new int[people];
        System.out.println("請輸入學生分數");
                //利用迴圈把學生分數存到陣列裡
        for (int i = 0; i < ary.length; i++) {
            System.out.print("第"+(i+1)+"位:");
            ary=scanner.nextInt();
        }
                //宣告第二個陣列,用來畫成績橫條圖用,因為事先知道陣列的內容,所以直接輸進去
                String distribution[]={
                        "0~9:",
                        "10~19:",
                        "20~29:",
                        "30~39:",
                        "40~49:",
                        "50~59:",
                        "60~69:",
                        "70~79:",
                        "80~89:",
                        "90~99:",
                        "100:"
                };
                //使用for-each迴圈讀取ary陣列內的所有資料,直接把資料除以10當作distribution索引
                for(int achievement : ary ){
                        distribution[achievement/10]+="=";
                }
                System.out.println("==成績分布橫條圖==");
                //輸出distribution陣列的所有資料
                for(int dis = 10 ; dis<=distribution.length&&dis>=0;dis--)
                System.out.println(distribution[dis]);
    }
}
參與人數 1經驗值 +4 收起 理由
ttt521 + 4 雖沒用到 但分享+分

瀏覽全部評分總評分 :  經驗值 +4

收藏
收藏0

網友回覆11

跳到指定樓層
本文最後由 編輯部女孩 於 2016-7-15 17:26 編輯

ary = scanner.nextInt();
應該是這樣喔
ZZZZZ嘴砲連連 不如淺水

回覆 2# scps2227995 的文章

本文最後由 編輯部女孩 於 2016-7-15 17:26 編輯

挖哩,在小老婆中括號裡面好像要加空白,不然就不會顯示出來= =
ary[ i ]=scanner.nextInt
本文最後由 編輯部女孩 於 2016-7-15 17:26 編輯

import java.util.*;
public class Java {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入學生人數(最多50人):");
        int people = scanner.nextInt();
        //宣告第一個陣列,陣列個數=學生人數
        int ary[] = new int[people];
        System.out.println("請輸入學生分數");
        //利用迴圈把學生分數存到陣列裡
        for (int i = 0; i < ary.length; i++) {
            System.out.print("第"+(i+1)+"位:");
            ary[ i ]=scanner.nextInt();
        }
        //宣告第二個陣列,用來畫成績橫條圖用,因為事先知道陣列的內容,所以直接輸進去
        String distribution[]={
            "100:",
            "90~99:",
            "80~89:",
            "70~79:",
            "60~69:",
            "50~59:",
            "40~49:",
            "30~39:",
            "20~29:",
            "10~19:",
            "0~9:"
        };
        //使用for-each迴圈讀取ary陣列內的所有資料
        for(int achievement : ary ){
            /**下switch-case判斷ary陣列內的資料是屬於那一個成績範圍
               其實用if-else也可以做得到.
               PS 每一個case裡面一定要下break 或是 continue **/
            switch(achievement/10){
                case 10:
                    distribution[0]+="=";
                    break;
                case 9:
                    distribution[1]+="=";
                    break;
                case 8:
                    distribution[2]+="=";
                    break;
                case 7:
                    distribution[3]+="=";
                    break;
                case 6:
                    distribution[4]+="=";
                    break;
                case 5:
                    distribution[5]+="=";
                    break;
                case 4:
                    distribution[6]+="=";
                    break;
                case 3:
                    distribution[7]+="=";
                    break;
                case 2:
                    distribution[8]+="=";
                    break;
                case 1:
                    distribution[9]+="=";
                    break;
                default:
                    distribution[10]+="=";
            }
        }
        System.out.println("==成績分布橫條圖==");
        //輸出distribution陣列的所有資料
        for(String dis : distribution)
        System.out.println(dis);
    }
}
=========================
最近會慢慢練習一些書上的習題
順便把程式碼分享給有需要的人
不過這些都是很基礎的東西
JAVA的核心是物件導向
所有的東西都可以當物件
也歡迎有興趣的人一起分享程式碼 [/quote]
可以簡化switch  那堆... 變成
for(int achievement : ary ){
                distribution[achievement/10] += "=";
}
還有 scanner 可以在做的安全一點 噢~
僅供參考 =ˇ=
-Fallenzone-

回覆 4# fallenzone 的文章

本文最後由 編輯部女孩 於 2016-7-15 17:26 編輯

for(int achievement : ary ){
                distribution[achievement/10] += "=";
}
你的意思是直接把分數除以10來當作distribution陣列的索引編號
以100分來說好了,100除以10等於10,19分除以10等於1
(我設的是整數型別,所以小數點會捨去,希望沒有學過程式語言的大家不要認為我國小數學沒學好)
那就是要更改distribution陣列裡面的排列
但在輸出的時候又要照100 90~99這樣排列....
得要用for迴圈下去輸出,應該OK~

回覆 5# 跑山的節奏 的文章

本文最後由 編輯部女孩 於 2016-7-15 17:26 編輯

黑 大致上是這樣 O.....O
-Fallenzone-
本文最後由 編輯部女孩 於 2016-7-15 17:26 編輯

scanner那邊可以考慮
try{
}
catch (Exception obj) {
}
ZZZZZ嘴砲連連 不如淺水

回覆 7# scps2227995 的文章

本文最後由 編輯部女孩 於 2016-7-15 17:27 編輯

加入例外敘述阿~~
我對例外還不太熟悉!
我會去研究看看!!
感謝分享
本文最後由 編輯部女孩 於 2016-7-15 17:27 編輯

建議用轉型的XD
Integer.parseInt(in,next());
-Fallenzone-
本文最後由 編輯部女孩 於 2016-7-15 17:27 編輯

論壇上有個叫"插入代碼"
  1. private void FindgasMaxMin_Click(object sender, EventArgs e)
  2.         {
  3.             float max = 0;
  4.             float min = 999;
  5.             float tmpgasavg = 0;
  6.             int maxindex = 0;
  7.             int minindex = 0;
  8.             if (GasolineView.Items.Count >= 2)
  9.             {
  10.                 for (int i = 0; i < GasolineView.Items.Count; i++)
  11.                 {
  12.                     tmpgasavg = float.Parse(GasolineView.Items[i].SubItems[7].Text);
  13.                     if (tmpgasavg > max)
  14.                     {
  15.                         max = tmpgasavg;
  16.                         maxindex = i;
  17.                     }
  18.                     else if (tmpgasavg < min)
  19.                     {
  20.                         min = tmpgasavg;
  21.                         minindex = i;
  22.                     }
  23.                 }
  24.                 GasolineView.Items[maxindex].ForeColor = Color.Blue;
  25.                 GasolineView.Items[minindex].ForeColor = Color.Red;
  26.             }
  27.             else
  28.             {
  29.                 MessageBox.Show("油耗筆數要大於2以上才能進行尋找最差和最好的油耗","警告",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
  30.             }
  31.         }
複製代碼
這樣把BBcode用插入代碼顯示出來的程式碼複製到記事本或是其它寫程式的軟體,程式碼縮排至少還是可以清楚的看到。
論壇的BBCode碼為
  1. [code ]要插入的代碼[/code ]
  2. 我在code後面的e故意多加的空白..這樣比較正常顯示,實際上是要移除掉空白才能正常顯是code的代碼
複製代碼
我個人是從高一
剛剛大概跑過一次你的程式。
你大概就學到陣列嗎?我猜測的~
其實我很不喜歡用for each雖然好用,但是在C和C++並沒有支援for each所以個人很不愛用for each。
不過剛剛有看到有人C++用iterator疊代器去做到for each
------------------------------
就開始學VB6.0寫程式,雖然作品沒有說什麼很特別的。但學課本的程式是算滿基本的。
要如何"實用"這才是另一個寫程式的開端。
這是本人最近寫的兩個小軟體
Google Chrome和Chroium備份還原小軟體
另一個在小老婆貼過
所以能從學寫基本的課本程式,到實用這就是不一樣的地方。
起初我也學寫課本的一堆程式...,後來慢慢有一些想法,一開始不管你看到某某程式或是Windows程式,你也學者寫寫看,就嘗試吧!嘗試的把你看的到功能都寫出來。
功力增加後,開始有自己的想法,就可以從你的想法中學寫出一點屬於自己風格的程式~
這大概是我的學習程式設計之路。