2015-03-16 1 views
2
import java.util.Scanner; 

public class TriangleDriver { 

public static void main(String[] args) { 
    System.out.println("Please enter value of N: "); 

    Scanner scan = new Scanner(System.in); 
    int num = scan.nextInt(); 

    for (int i = 1; i <= num; i++) { 
     System.out.printf("%d\t", i); 
    } 
    System.out.println(""); 
    System.out.println("---- ----"); 
    for (int i = 0; i < num; i++) { 
     System.out.print((i + 1) + " "); 
     for (int j = 1; j <= num; j++) { 
      System.out.printf("%7.2f", Math.sqrt(i * i + j * j)); 
     } 
     System.out.println(); 
    } 
} 
} 

Это может быть полезно для других, которые являются новыми для кодирования. Однако мне нужна помощь. При вводе числа, скажем, 8,Длина правого треугольника (Java Eclipse): диаграмма ввода пользователя

-это не разнесен должным образом

-Первой фактическая строка данных не должна включать в себя 1,00, 2,00, 3,00

-Personal Предпочтения: Я хотел бы включить ---- сверху после i номера и | на стороне для J-номеров

Что вы, ребята, думаете?

+0

Что это за отображение и что бы вы хотели увидеть вместо этого? –

+0

http://snag.gy/pl3x1.jpg –

ответ

3

Это близко к тому, как ваш код должен выглядеть

public class TriangleDriver { 
    private static final String REQUEST = "Please enter value of N: "; 
    private static final String SPACER3 = " "; 
    private static final String SPACER4 = " "; 
    private static final String DIVIDER = "----"; 
    private static final String FORMAT_ONE = " %d "; 
    private static final String FORMAT_FIRST_ROW = "%7.0f"; 
    private static final String FORMAT_ADDITIONAL_ROWS = "%7.2f"; 
    private static final int HEADER_LINES = 2; 

    public static void main(String[] args) { 
     int num = getIntInput(REQUEST); 
     StringBuilder[] result = solution(num); 
     printSBArray(result); 
    } 

    static private int getIntInput(String request){ 
     System.out.print(request); 
     return new Scanner(System.in).nextInt(); 
    } 

    static private void printSBArray(StringBuilder[] sbArray){ 
     for (StringBuilder sb : sbArray) 
      System.out.println(sb.toString()); 
    } 

    static private StringBuilder[] solution(int num){ 
     StringBuilder output[] = new StringBuilder[num + HEADER_LINES]; 
     for(int i = 0; i < output.length; i++) 
      output[i] = new StringBuilder(""); 

     // build line 0 
     output[0].append(SPACER4 + SPACER4); 
     for (int i = 1; i <= num; i++) { 
      output[0].append(String.format(FORMAT_ONE, i)); 
     } 

     // build line 1 
     output[1].append(DIVIDER + SPACER4); 
     for (int i = 0; i < num; i++) 
      output[1].append(String.format(DIVIDER + SPACER3)); 

     // build line 2 
     int i = 0; 
     output[2].append((i + 1) + SPACER4); 
     for (int j = 1; j <= num; j++) { 
      output[2].append(String.format(FORMAT_FIRST_ROW, Math.sqrt(i * i + j * j))); 
     } 

     // build line 3+ 
     for (i = 1; i < num; i++) { 
      output[i + 2].append((i + 1) + SPACER4); 
      for (int j = 1; j <= num; j++) { 
       output[i + 2].append(String.format(FORMAT_ADDITIONAL_ROWS, Math.sqrt(i * i + j * j))); 
      } 
     } 
     return output; 
    } 
} 

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

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

3

Конечный результат:

import java.util.Scanner; 

public class TriangleDriver { 

    public static void main(String[] args) { 
     System.out.println("Please enter value of N: "); 

     Scanner scan = new Scanner(System. in); 
     int num = scan.nextInt(); 

     System.out.print("\t"); 
     for (int i = 1; i <= num; i++) { 
      System.out.printf("%d\t", i); 
     } 
     System.out.println(); 

     String barrier = "\t"; 
     for (int i = 0; i < num; i++) 
     barrier += "----\t"; 
     System.out.println(barrier); 

     for (int i = 0; i < num; i++) { 
      System.out.print((i + 1) + ""); 
      for (int j = 1; j <= num; j++) { 
       System.out.printf("\t%.2f", Math.sqrt(i * i + j * j)); 
      } 
      System.out.println(); 
     } 
    } 
} 

Объяснение:

Прежде всего, вы использовали 7.2f в вашем printf(), которая была боль устранить. В 7 в 7.2f указано, что вы хотите, чтобы на выходе всегда было 7 пробелов, независимо от длины номера. Это не равно сумме, добавленной \t, поэтому столбцы не выстраиваются в линию. Чтобы создать барьеры под каждой строкой, я использовал цикл for, чтобы добавить разделы N. Это должно быть легко добавить | s.

В отношении к

Первая фактическая строка данных не должна включать в себя 1,00, 2,00, 3,00

Я не знаю, что вы действительно хотите. Я не уверен, что вы хотите, чтобы первое значение было - кажется, следуют расчету Math.sqrt(i * i + j * j), который вы используете для генерации данных для других строк.

+0

Спасибо! Я, должно быть, испортил мой i & j, потому что 1 должен быть 1.41 –

+0

. Мне нужно было добавить 1 к i, так как он начинается с 0. Спасибо за помощь. –