2012-12-04 38 views
-2

嗨,大家好,基本上我是新來的Java在十月開始,即時通訊科技。我需要幫助,請與以下將不勝感激。如何使用一個數組鏈接到另一個?

注:我還沒有真正奠定了代碼出來沒這麼說我想獲得程序前結構/評論等工作第一。 UULIB是大學圖書館的名稱。

目標:找到低於AVERAGE標記的學生的姓名。

這是我下面使用,試圖找到它的代碼,但它跳過第一[0]數組編號,只給了我一個名字。

import uulib.*; 

public class Q3 
{ 
    public static void main(String[] args) 
    { 
     int class_number = Console.getInt("Enter how many students between 1-10"); 

     while (class_number < 1 || class_number > 10) 
      class_number = Console.getInt("Enter how many students between 1-10"); 

     System.out.println(""); 

     String[] name = new String[class_number]; 
     int[] score = new int[name.length]; 

     for (int i=0; i<class_number; i=i+1) 
     { 
      name[i] = Console.getString("Enter Name"); 
      score[i] = Console.getInt("Enter score"); 

      if (score[i] < average(score)) 
       System.out.print(name[i] + " "); 
     } 

     System.out.println(" "); 
     System.out.println("Average mark = " + Num.format(average(score), 1)); 
     System.out.println("Lowset mark = " +lowset(score)); 
     System.out.println("Highest mark = " +highestValue(score)); 
     System.out.println("Name of students with highest mark = "); 
    } 

    public static double average(int[] nums) 
    { 
     double total = 0; 

     for (int i=0; i<nums.length; i=i+1) 
     { 
      total = total + nums[i]; 
     } 
     return total/nums.length; 
    } 

    public static int lowset(int[] nums) 
    { 
     int minimum = nums[0]; //sets the first to be the smallest 

     for (int i = 0; i < nums.length; i++) //goes through your array 
     { 
      if (nums[i] < minimum) //checks and replaces if necessary 
      { 
       minimum = nums[i]; 
      } 
     } 
     return minimum; 
    } 

    private static int highestValue(int[] numbers) 
    { 
     int highest = numbers[0]; 
     for (int i = 0; i < numbers.length; i++) 
     { 
      if (numbers[i] > highest) 
      { 
       highest = numbers[i]; 
      } 
     } 
     return highest; 
    } 
} 
+0

_「我還沒有真正奠定了代碼出來沒這麼說「_嚴重 - 如果你不在乎,我們爲什麼要這樣做? – npe

+1

儘量縮小你的代碼,讓每個人閱讀起來更容易,並在旁註:人們不要好好地問作業,直接要求答案。 –

回答

2

你應該分裂您的for循環分爲兩個for循環像以前已經收集了所有的分數不能計算平均:

for (int i=0; i<class_number; i=i+1) { 
    name[i] = Console.getString("Enter Name"); 
    score[i] = Console.getInt("Enter score"); 
} 
for (int i=0; i < class_number; i++) { 
    if (score[i] < average(score)) 
     System.out.print(name[i] + " "); 
} 
+0

您可能只需要計算一次平均值,而不是第二次循環的每次迭代計算... –

+0

oh,ofc。忘了那個。 – dicheridoo

+0

謝謝,這個工作很好,謝謝大家 – Rueben

0

在你第一次迭代(i == 0),score[i] < average(score)將評估爲假,因爲實際上score[i] == average(score),這就是爲什麼你沒有得到打印的名字。

但是,您的整個邏輯是有缺陷的。您應該先循環並要求用戶輸入數據,然後計算平均值,最後再次循環數據以確定哪個學生的分數低於計算的平均值。

1

看起來你的程序需要做3件主要事情。 (從控制檯)

  • 計算平均值

    1. 收集輸入數據(和其他任何你需要計算)。您的代碼有最高和最低,但您的問題文本並不表示該信息是必需的。
    2. 輸出結果。

    這裏是一個小的代碼,以幫助提高你的代碼的組織。

    public static void main(String[] args) { 
        collectInputData(); 
        calculate(); 
        outputResults(); 
    } 
    

    如果您只記得答案中的一件事,請記住這一點。直到您的代碼「正在工作」或「良好」才能改進結構或評論!您可以通過改進結構和評論來讓自己的代碼更好。

  • +0

    感謝的是,是的,我的平均分以下的學生(S)的輸入數據和1.Average標記 2.姓名(或名稱) 3.最低點 4.最高分 5.姓名(或名稱)的獲得最高分的學生 – Rueben

    0

    要檢查的第一個繞過去,這是顯然不會少於如果是一樣的。您應該在數組填充所有等級後執行if語句檢查,並對循環檢查執行相同的等級低於平均值的檢查。

    相關問題