2013-08-24 14 views
0

我需要通過來自方法barChartPrinter的調用打印出條形圖。即將打印:barChartPrinter(5, 6, 2);將打印:5個XX的垂直列,然後是 個空格,然後是6個XX的垂直列和2個XX的垂直列。Java條形圖方法

這些數字基於用戶輸入,所以我想我需要收集數字並將它們存儲在數組中。我正在考慮一個for循環將涉及, ,但我不知道我該怎麼做。

public class BarChart { 

    public static void main(String args[]) { 
     int[] list = new int[4]; 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter four integers: "); 
     for(int i = 0; i < list.length; i++) 
     list[i] = input.nextInt(); 

     System.out.println(); 

     barChartPrinter(list); 
    }  

    public static void barChartPrinter(int[] numbers) { 
     int max = numbers[0]; 
     for (int i = 0; i < numbers.length; i++) 
     if(numbers[i] > max) 
      max = numbers[i]; 
    } 
} 

這是我卡住的地方:定義打印出條形圖的方法;給定用戶輸入值。該方法需要以這種格式打印出來,即

barChartPrinter(1, 2, 3, 4) = 

出於某種原因,它不會顯示如何條形圖應該在這裏建造所以我就形容它:

會有首先是XX的列,然後是XX的列(其中兩個垂直地表示2),然後是XX的另一列(但這次是三個彼此之上,以表示數字3),最後是另一列XX * 4垂直。

任何指針?

+1

爲什麼不先嚐試一下,向我們展示您的嘗試。您還需要將問題分爲較小的問題,並嘗試解決每個問題,首先獲取用戶輸入。 –

+1

我已更新我的帖子,謝謝! – user2713650

回答

1

OK,現在我敢肯定,你知道,這將是很輕鬆創建水平條形圖:

2 6 4 

** 
****** 
**** 

由於打印和控制檯的PrintStream的的println方法(的System.outout)水平打印東西。你的任務的技巧是如何垂直打印此圖。爲此,你將不得不使用一點邏輯。由於這顯然是功課,我不會給你一個解決方案,而是會建議選擇。

  • 你知道你需要使用某種循環來連續打印行。
  • 一種可能的解決方案是,通過首先找到數組保存的最大值,計算循環前的循環次數。如果你這樣做,然後使用for循環。
  • 另一個可能的解決方案,你沒有找到最大值,而只是循環直到完成。這裏使用一個while循環。這將是我使用的選項,我會使用一個布爾變量,比如keepGoing來幫助告訴while循環何時保持循環以及何時停止。
  • 如果你使用後一個選項,你將在循環中使用一個int計數器來檢查你正在打開的行,並且你將在循環內部提前計數。
  • 您需要在while循環中嵌套for循環以遍歷每個數組項。
  • 您可以使用此計數器和數組項(在while循環中的for循環中)查看您最終將打印的字符串是否應該添加"* "
  • 在inner for loop之後,您將打印您創建的字符串。
  • 如果沒有"* "存在(您可以撥打myString.trim().isEmpty()),然後keepGoing = false;和while循環應該停止。

編輯:您發佈的代碼是有點過,因爲它告訴用戶輸入電話號碼,但只接受三個。你會想解決這個問題。


編輯2幽州:

嘿嘿,對不起啊,我已經整理出來的代碼。我已經編寫了在方法中查找最大值的方法。我現在被困在實際製作圖表的一步。我知道它會水平打印XX的每一行,但我仍然難以知道如何實現這一點 - 我知道它將涉及for循環,但我無法看到如何爲每列打印XX ;道歉,如果我失去了一些東西明顯

再次,通過拆分大問題分解成小步驟打破你的問題,你能想到的最小,進而解決各小步。你知道你將不得不構造一個要打印的字符串,所以你應該關注它,關於如何構造這個String,以便在需要的時候存在星號,並且當列應該存在時存在空格不顯示星號。試着想出一個解決方案,甚至是部分解決方案,並將其作爲編輯來發布,就像我將這個編輯發佈到我的答案中一樣。

+0

嘿,對不起,我已經把代碼排序了。 我已經編寫了在方法中查找最大值的方法。我現在被困在實際製作圖表的一步。我知道它會水平打印XX的每一行,但我仍然難以知道如何實現這一點 - 我知道它將涉及for循環,但我無法看到如何爲每列打印XX ;道歉,如果我失去了明顯的東西 – user2713650

+0

@ user2713650:請參閱編輯2. –

+0

我一直在嘗試各種事情,但沒有去過任何地方。事實上,我可能更加困惑自己。我有過遍歷行和列的想法。不知道我是否在那裏說垃圾。 – user2713650