2014-10-29 2 views
0

Итак, у меня есть упражнение на Java, где мне нужно, чтобы пользователь вводил число от 1 до 9, и он выводил полый квадрат NxN, основанный на числе введенных им чисел. Мне нужно использовать циклы и условные обозначения. Идея заключается в том, чтобы иметь что-то вроде этого:Полый квадрат NxN с использованием петель

вход Номер: 5

выход: (точки будут заменены пробелами)

55555 
5 5 
5 5 
5 5 
55555 

Я не могу показаться, чтобы получить его к выходу правильно , У меня есть дополнительная «средняя» строка, помеченная в начале моей первой строки. Вот что у меня есть:

import java.util.Scanner ; 

public class Assignment1Q4 { 
    public static void main (String [] args) { 
    int n, counter1=1, counter2=1 ; 
    Scanner kbd = new Scanner(System.in) ; 
    System.out.print("Please enter a number between 1 and 9: ") ; 
    n = kbd.nextInt() ; 

    if(n<=9) { 
     while(counter1<=n) { //counter1 keeps track of what line it's on 
      if(counter1==1) { //determines if first line 
       while(counter2<=n) { //counter2 keeps track of how many characters printed 
        System.out.print(n); 
        counter2=counter2+1 ; 
       } 
      } 
      if(counter1==n) { //determines if last line 
       counter2=1 ; 
       while(counter2<=n) { //does the same as the while for the first line 
        System.out.print(n); 
        counter2=counter2+1 ; 
       } 
      } 
      else { //is it the lines in between 
       counter2=1 ; 
       while(counter2<=n) { 
        if(counter2==1 || counter2==n) { //is it first or last char 
         System.out.print(n) ; 
        } 
        else { 
         System.out.print(" ") ; 
        } 
        counter2=counter2+1 ; 
       } 
      } 

      System.out.println() ; //makes sure each new line does print on a new line 
      counter1=counter1+1 ; 
     } 
    } 
    else { 
     System.out.print("Error: The number you have entered is not between 1 and 9") ; 
    } 
} 

}

Это выход:

Please enter a number between 1 and 9: 4 
44444 4 
4 4 
4 4 
4444 
+0

Только один совет, вместо того чтобы использовать переменные с именем счетчик1 и Counter2, а затем с комментарии говорят, что он делает, вы могли бы использовать самостоятельно описательный имя переменной как строки (или строку) и столбец. Это облегчит для других возможность увидеть, что делает ваш код. – user1071777

ответ

0

В ваш главный в то время как цикл у вас есть

if (counter1 == 1) //determines if first line 
    ... 
if (counter1 == n) //determines if last line 
    ... 
else //is it the lines in between 
    ... 

Так что же происходит в первая итерация вашего цикла while выполняется как чертеж для первого цикла, так и логика для средней линии

Для решения этого изменения

if (counter1 == n) //determines if last line 

в

else if (counter1 == n) //determines if last line 
+0

Изменение его в другом, если сработало! Спасибо :) – Rachel

0

Проблема является объединение еще с если. Объедините два блока if с || и программа отлично работает

package ocpjp.hessam; 

import java.util.Scanner ; 

public class Assignment1Q4 { 
    public static void main (String [] args) { 
    int n, counter1=1, counter2=1 ; 
    Scanner kbd = new Scanner(System.in) ; 
    System.out.print("Please enter a number between 1 and 9: ") ; 
    n = kbd.nextInt() ; 

    if(n<=9) { 
     while(counter1<=n) { //counter1 keeps track of what line it's on 

      if(counter1==1 || counter1==n) { //determines if last line 
       counter2=1 ; 
       while(counter2<=n) { //does the same as the while for the first line 
        System.out.print(n); 
        counter2=counter2+1 ; 
       } 
      } 
      else { //is it the lines in between 
       counter2=1 ; 
       while(counter2<=n) { 
        if(counter2==1 || counter2==n) { //is it first or last char 
         System.out.print(n) ; 
        } 
        else { 
         System.out.print(" ") ; 
        } 
        counter2=counter2+1 ; 
       } 
      } 

      System.out.println() ; //makes sure each new line does print on a new line 
      counter1=counter1+1 ; 
     } 
    } 
    else { 
     System.out.print("Error: The number you have entered is not between 1 and 9") ; 
    } 
} 
} 
+0

Я изначально сочетал его как или, но не печатал последнюю строку – Rachel

+0

@Snaptic Вы уверены? Этот фрагмент кода работает так, как должен. – Hessam

0

Ответ illeyezur был верным. Я хотел бы ввести другой подход.

Я думаю, вы не нашли проблему, потому что код был немного сложнее. Попробуйте упростить.

Упражнение говорит: напечатайте номер, если вы на краю квадрата, SPACE в противном случае.

Что-то вроде этого:

import java.util.Scanner ; 

public class Assignment1Q4 { 
    public static void main (String [] args) { 
     int n; 
     Scanner kbd = new Scanner(System.in) ; 
     System.out.print("Please enter a number between 1 and 9: ") ; 
     n = kbd.nextInt() ; 

     if (n > 9) { 
      System.out.println("Error: The number you have entered is not between 1 and 9"); 
      return; 
     } 

     String nS = String.valueOf(n); 
     String eS = " "; 

     for (int x = 1; x <= n; x++) { 
      for (int y = 1; y <= n; y++) { 
       String toPrint = (x == 1 || x == n || y == 1 || y == n) ? nS : eS; 
       System.out.print(toPrint); 
      } 
      System.out.println(); 
     } 
    } 
} 
Смежные вопросы