2015-11-10 3 views
0

мне нужно напечатать гистограмму следующим образом:Как печатать числа на горизонтальной гистограмме?

My Histogram 
12.0 #### 2.3 
12.5 ### 1.55 
13.0 ######################################## 21.9 
13.5 ########################### 13.33 
14.0 ################################## 17.25 
14.5 ########## 5.21 

У меня есть гистограмма масштабирования. В целом, Название будет первым, а ниже нижнего ряда в позиции 40 или около него будет шкала, то есть «хорошее» число рядом с максимальным значением. После каждого бара следует его длина.

Вот мой код. Мне нужна помощь, чтобы получить цифры справа и слева от гистограммы для печати, а затем название. У меня есть уравнение, необходимое для шкалы чисел слева, но оно не будет печататься. Наряду с названием и данными справа.

import java.util.Scanner; 

public class Array3 
{ 
    public static void main(String[] arg) 
    { 
    Histogram h = new Histogram(); 
    System.out.println(h.readHistogram()); 
    } // end main 


} // end Array 

class Histogram 
{ 
    private String title; 
    private double start, stop; 
    private double[] data; 



public Histogram(String title, double start, double stop, double[] data, int numBars) 
{ 
    this.title = title; 
    this.start = start; 
    this.stop = stop; 
    this.data = new double[numBars]; 

    for(int i = 0; i < numBars; ++i) 
    { 
     if(data.length > i) 
     { 
      this.data[i] = data[i]; 
     } // end if 
    } // end for 

} // end constructor Histogram 

public Histogram(){} 

public String toString() 
{ 
    String numOfHash = ""; 
    int a; 
    double max = data[0]; 
    double step1 = (stop-start)/(data.length-1); 


    for(int k = 0; k < data.length; ++k) 
    { 
     if(data[k] > max) 
     { 
      max = data[k]; 
     } 

    } 


    for(int i = 0; i < data.length; ++i) 
    { 
     a = (int) (data[i] + .5); 
     double startNum = start + step1*i; 
     System.out.println(startNum); 

     for(int j = 0; j < a * 40/max ; ++j) 
     { 
      numOfHash = numOfHash + "#"; 
     } // end for loop 

     numOfHash = numOfHash + "\n"; 
    } // end for loop 

    return numOfHash; 

} // end toString 

public Histogram readHistogram() 
{ 
    int num = 0; 
    Scanner stdin = new Scanner(System.in); 
    System.out.println("Enter a histogram."); 
    System.out.println("Title: "); 
    String title = stdin.nextLine(); 
    System.out.println("Start value: "); 
    double start = stdin.nextDouble(); 
    System.out.println("End Value: "); 
    double stop = stdin.nextDouble(); 
    System.out.println("Data: "); 

    double[] data = new double[6]; 
    for(int i = 0; i < 6; ++i) 
    { 
     data[i] = stdin.nextDouble(); 
     num++; 
    } 
    return new Histogram(title, start, stop, data, num); 
} 

} // конец Гистограмма

ответ

1

Ваш метод ToString требуется немного работы. Во-первых, вам нужно найти максимальное значение. Затем вы можете вычислить масштабный коэффициент. Теперь вы можете нарисовать гистограмму.

Вот код.

import java.util.Scanner; 

public class Array3 { 
    public static void main(String[] arg) { 
     Histogram h = new Histogram(); 
     System.out.println(h.readHistogram()); 
    } // end main 

} // end Array3 

class Histogram { 
    private String title; 
    private double start, stop; 
    private double[] data; 

    public Histogram(String title, double start, double stop, double[] data, 
      int numBars) { 
     this.title = title; 
     this.start = start; 
     this.stop = stop; 
     this.data = new double[numBars]; 

     for (int i = 0; i < numBars; ++i) { 
      if (data.length > i) { 
       this.data[i] = data[i]; 
      } // end if 
     } // end for 

    } // end constructor Histogram 

    public Histogram() { 
    } 

    public String toString() { 
     String numOfHash = title + "\n"; 

     double max = data[0]; 

     for (int k = 1; k < data.length; ++k) { 
      max = Math.max(max, data[k]); 
     } 

     double scaleFactor = max/40D; 

     double a = start; 

     for (int i = 0; i < data.length; ++i) { 
      numOfHash += String.format("%.1f", a) + " "; 

      int count = (int) Math.round(data[i]/scaleFactor); 
      for (int j = 0; j < count; ++j) { 
       numOfHash += "#"; 
      } // end for loop 

      numOfHash += " " + String.format("%.2f", data[i]) + "\n"; 
      a += 0.5D; 
     } // end for loop 

     return numOfHash; 

    } // end toString 

    public Histogram readHistogram() { 
     int num = 0; 
     Scanner stdin = new Scanner(System.in); 
     System.out.println("Enter a histogram."); 
     System.out.println("Title: "); 
     String title = stdin.nextLine(); 
     System.out.println("Start value: "); 
     double start = stdin.nextDouble(); 
     System.out.println("End Value: "); 
     double stop = stdin.nextDouble(); 
     System.out.println("Data: "); 

     double[] data = new double[5]; 
     for (int i = 0; i < 5; ++i) { 
      data[i] = stdin.nextDouble(); 
      num++; 
     } 

     stdin.close(); 

     return new Histogram(title, start, stop, data, num); 
    } 

} // end Histogram 
Смежные вопросы