2014-09-10 2 views
0
import java.util.Scanner; 

public class Ve { 
    public static void main(String[]args){ 

    int hoyde; 
    int linje = 0; 

    Scanner tast = new Scanner(System.in); 

    System.out.println("Hvor hoy skal din V bli?(mellom 2 og 10)"); 
    hoyde = tast.nextInt(); 
    tast.nextLine(); 

    //assert (hoyde <=2 && hoyde >=10) : "hoyde må være mellom 2 og 10"; 

    for(linje= 0; linje < hoyde;linje++) { 
     int start = linje; 
     int end = (hoyde-1)*2; 

     for(linje= 0;linje<=linje;linje++){ 
     if(linje == end){ 
      System.out.println("*"); 
      break; 
     } 
     else if(linje == start){ 
      System.out.print("*"); 
     } else{ 
      System.out.print(" "); 
     } 
     } 
    } 
    } 
} 

Я пытаюсь распечатать V используя *. Так или иначе, когда я запускаю код, он печатает две одиночные звезды в одной строке. Я застрял на этом, и я не могу понять, как я должен распространять данную информацию. Я использую Scanner для ввода числа, для которого должна быть V.Loop не дал желаемого результата, застрял

+0

Вы не можете использовать ту же переменную для обоих контуров. Создавайте новый каждый раз для своего второго цикла. – Keppil

+0

'for (...; linje <= linje; ...) {' это вызовет проблемы 'linge' должно всегда равняться' linge'. – Shaded

ответ

0

Он печатает звезду 1, когда (linje == start) и звезда 2, когда (linje == end). После внутреннего цикла, linje> hoyde, поэтому выходит из внешней петли.

Как уже отмечалось выше, вы можете указать переменные вашего цикла в разных именах.

+0

Итак, код выпрыгивает из цикла, прежде чем он сможет распечатать результат? –

+0

Да, выпрыгивает из первого цикла, поэтому он просто печатает 1 строку, а не многие. как вам хотелось бы. –

1

Несмотря на то, что он не касается каких-либо связанных с Java материалов, а только чистого алгоритма ad hoc, на него не следует отвечать. Но поскольку вы используете drjava, я предполагаю, что вы просто на своем первом пути в Java-мире, и было бы неплохо дать руку.

Как уже отмечалось в своем комментарии к Keppil, никогда не используйте один и тот же итерационный примитив в двух одобренных циклах, если только не существует специального метода (никогда не встречался сам), потому что вы потеряете первый индекс цикла, когда его увеличивается (уменьшается) внутренним циклом.

Существует также некоторые Algo подходы, и надеемся, что они будут ясно с комментариями в коде ниже:

public class FancyVDrawer 
{ 
    public static void main(String[] args) 
    { 
    int hoyde; 
    int linje = 0; 
    Scanner tast = new Scanner(System.in); 
    System.out.println("Hvor hoy skal din V bli?(mellom 2 og 10)"); 
    hoyde = tast.nextInt(); 
    tast.nextLine(); 
    //assert (hoyde <=2 && hoyde >=10) : "hoyde må være mellom 2 og 10"; 
    ++hoyde; //We need hoyde line stars thus should be incremented by one since we cannot draw one star in last line 
    int end = (hoyde - 1) * 2; // The end should be calculated once, then decremented and not reassigned in each loop iteration 
    for (linje = 0; linje < hoyde; linje++) 
    { 
     int start = linje; 
     for (int i = 0; i < end; i++) 
     { 
     if ((i == start)) 
     { 
      System.out.print("*"); 
     } else if (i == (end-1)) 
     { 
      System.out.println("*"); 
      --end; // Decrement the end index once we are going to a new line 
     } 
     else 
     { 
      System.out.print(" "); 
     } 
     } 
     if(linje == (hoyde - 2)) // Should break to prevent writing the last lonely star 
     break; 
    } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^