2015-11-21 2 views
2
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class Histogram 
{ 
    public static void main(String[] args) throws FileNotFoundException 
    { 
    Row[] numbers = { 
      new Row("1 - 10"), new Row("11 - 20"), new Row("21 - 30")     
      new Row("31 - 40"), new Row("41 - 50"), new Row("51 - 60") 
      new Row("61 - 70"), new Row("71 - 80"), new Row("81 - 90"), 
      new Row("91 - 100") 
       }; 
for(Row number : numbers) 
    System.out.print(number); 
Counter section = new Counter(); 
section.StarCounter(); 

} 

он печатает что-то вроде этого:Как я могу напечатать массив и метод из другого класса

1 - 10| 
11 - 20| 
21 - 30| 
***************** 
********* 
*** 
ect. 

Я хотел бы, чтобы это напечатать что-то вроде:

1 - 10|***************** 
11 - 20|********* 
21 - 30|*** 
ect. 

спасибо заранее для любых указателей, я, вероятно, просто игнорирую очевидное.

Счетчик класс:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 


public class Counter 
{ 
    public void StarCounter() throws FileNotFoundException 
    { 
    File file = new File("alotofnumbers.txt"); 
    Scanner scan = new Scanner(file); 
    int[] integers = new int[1000]; 
    int start = 0; 
    int count1 = 0; 
    int count2 = 0; 
    int count3 = 0; 
    int count4 = 0; 
    int count5 = 0; 
    int count6 = 0; 
    int count7 = 0; 
    int count8 = 0; 
    int count9 = 0; 
    int count10 = 0; 

    while (scan.hasNextInt()) 
    { 
    integers[start++] = scan.nextInt(); 
} 

for (int input : integers) 
{ 
    if(input <= 10) 
    { 
    count1++; 
    } 
    else if(input > 10 && input <= 20) 
    { 
    count2++; 
    } 
    else if(input > 20 && input <= 30) 
    { 
    count3++; 
    } 
    else if (input > 30 && input <= 40) 
    { 
    count4++; 
    } 
    else if (input > 40 && input <= 50) 
    { 
    count5++; 
    } 
    else if (input > 50 && input <= 60) 
    { 
    count6++; 
    } 
    else if (input > 60 && input <= 70) 
    { 
    count7++; 
    } 
    else if (input > 70 && input <= 80) 
    { 
    count8++; 
    } 
    else if (input > 80 && input <= 90) 
    { 
    count9++; 
    } 
    else if (input > 90 && input <= 100) 
    { 
    count10++; 
    } 
} 
    double counted1 = count1/2.7; 
    double counted2 = count2/2.7; 
    double counted3 = count3/2.7; 
    double counted4 = count4/2.7; 
    double counted5 = count5/2.7; 
    double counted6 = count6/2.7; 
    double counted7 = count7/2.7; 
    double counted8 = count8/2.7; 
    double counted9 = count9/2.7; 
    double counted10 = count10/2.7; 

    for(int star = 0; star <= counted1 ; star++) 
    { 
    System.out.print("*"); 

    } 
    System.out.println(); 


    for(int star = 0; star <= counted2 ; star++) 
    { 
    System.out.print("*"); 
    } 

    System.out.println(); 
    for(int star = 0; star <= counted3 ; star++) 
    { 
    System.out.print("*"); 
    } 

    System.out.println(); 

    for(int star = 0; star <= counted4 ; star++) 
    { 
    System.out.print("*"); 
    } 

    System.out.println(); 
    for(int star = 0; star <= counted5 ; star++) 
    { 
    System.out.print("*"); 
    } 

     System.out.println(); 

    for(int star = 0; star <= counted6 ; star++) 
    { 
     System.out.print("*"); 
    } 

    System.out.println(); 
    for(int star = 0; star <= counted7 ; star++) 
    { 
     System.out.print("*"); 
    } 

     System.out.println(); 

    for(int star = 0; star <= counted8 ; star++) 
    { 
     System.out.print("*"); 
    } 

     System.out.println(); 
     for(int star = 0; star <= counted9 ; star++) 
     { 
     System.out.print("*"); 
     } 

     System.out.println(); 

     for(int star = 0; star <= counted10 ; star++) 
     { 
     System.out.print("*"); 
     } 

     System.out.println();  


} 
} 

Видимо мой пост должен много кода, и я на самом деле не имею гораздо больше информации, чтобы дать так, что хочет, чтобы я что-то типа случайного вверх. public class Row { частные строки строк;

public Row(String colums) 
{ 
rows = colums ; 
} 

public String toString() 
{ 
Counter section = new Counter(); 
return rows + "|" + "\n"; 
} 

public void setRow(String colums) 
{ 
rows = colums; 
} 

public String getRow() 
{ 
return rows; 
} 

} 
+0

Что-то пошло не так, когда я отправлял сообщение, что он печатает –

+0

whats 'Counter'? –

+0

где ваш 'счетчик'? – Satya

ответ

1

Я не совсем уверен, что ваш вопрос, как название, кажется, не связаны, что близко к вопросу, так что я буду считать, что это «есть лучше подходят для создания гистограммы? ».

Вы не можете использовать печать всех названий (строк), а затем печатать звезды. Они должны быть выполнены одновременно.

Поскольку целочисленное деление на Java автоматически округляет вниз, все ваш код счета может быть значительно уменьшен:

int[] counts = new int[GROUPS]; 
for (int i: inputs) 
    counts[Math.min(GROUPS - 1, (i + 1)/10)]++; 

GROUPS необходимо будет определить как статический класс постоянная.

Затем печатание отсчеты может быть упрощена:

for (int i = 0; i < GROUPS; i++) { 
    System.out.print(String.format("%2d - %2d]", i * 10 + 1, i * 10 + 10)); 
    for (int s = 0; s < counts[i]; s++) 
     System.out.print("*"); 
    System.out.println(); 
} 

На самом деле это может быть еще более упрощен с помощью Java 8 потоков, но это, вероятно, больше информации, чем вы после этого в данный момент.

+0

Хорошо, как я могу печатать мои строки и звезды одновременно? Даже если у меня их в одном цикле, они не будут печатать их рядом друг с другом, он вместо этого напечатает мое первое значение массива, тогда все мои строки звезд затем напечатают мое второе значение массива, а затем все звезды снова будут разными. –

+0

@JadenHambley, который звучит как ошибка для меня. Обратите внимание: если вы используете 'System.out.print', следующая печать будет в той же строке. Если вы используете 'println', следующая печать будет на следующей строке. – sprinter

+0

Что вы подразумеваете под ошибкой? извините за мое незнание, новое для программирования. –

1

Я не вижу никаких открывающих или закрывающих кронштейнов для петли for. section.StarCounter должен находиться в одном цикле.

Попробуйте это:

for(Row number : numbers){ 
System.out.print(number); 
Counter section = new Counter(); 
section.StarCounter(); 
System.out.println(); 
} 

Обратите внимание на цикл имеет фигурные скобки и цикл заканчивается с новой строки.

+0

Если я их в одном цикле, он напечатает мое первое значение массива, а затем все мои строки звезд, затем мое второе значение массива, а затем все мои ряды звезд снова, все еще на отдельных строках, все, что я хотел бы сделать, это заставить мои звезды печатать рядом с моими значениями массива. –

+0

См. Отредактированный ответ – stackMan10

+0

im, все еще получающий тот же результат, строки звезд появляются под объектами массива. и вместо того, чтобы все мои петли печатались только один раз, когда они печатаются один раз для каждого момента, когда объект массива печатается. –