#java
#java
Вопрос:
Я новичок в Java. Как раз сейчас я практикую. Если я ввожу данные как 6, выходные данные должны быть такими:
1 2 3 4 5 6
Здесь я публикую код, который я пробовал:
import java.util.Scanner;
public class Number {
public static void main(String args[]){
int n;
Scanner in = new Scanner(System.in);
n = in.nextInt();
in.close();
int k = 1;
for (int i = 1; i <= n; i )
{
// k=i;
for (int j = 1; j <= i; j )
{
System.out.print(" " k);
if (n==k)
{
break;
}
k ;
}
System.out.println("n");
}
}
}
Если я введу n = 4, я не смогу отобразить результат в виде:
1 2 3 4 4
Комментарии:
1. Идентификация позволяет сделать ваш код читаемым. Это минимум, который нужно сделать при обращении за помощью (и это в конечном итоге сделает решение вашей проблемы очевидным).
Ответ №1:
Ваш break
выйдет только из внутреннего цикла (того, который повторяется j
). Внешний цикл продолжит выполняться, что приведет к печати дополнительных чисел.
Вам нужно либо заменить ее на return;
или System.exit(0)
, или поместить метку перед вашим внешним циклом (тем, который повторяется i
) и использовать помеченный разрыв.
Комментарии:
1.
return
вероятно, это лучший вариант.2. Я согласен. Особенно когда код «вывести числовую пирамиду для
n
» извлекается в отдельный метод.
Ответ №2:
Сделайте правильный отступ в своем коде. Это помогает вашему мозгу понять.
Тем не менее, решение представляет собой два цикла с тремя переменными.
Вам нужен цикл, который идет от 1 до n.
Внутренний цикл, который переходит от 1 к количеству элементов в строке.
И вам нужно количество элементов в строке. Эта переменная увеличивается каждый раз, когда выполняется внутренний цикл.
Ответ №3:
Это плохо сформулированный вопрос, но я предполагаю, что вы хотите знать, почему дополнительные 4?
Причина в том, что у вас есть вложенные циклы, поэтому break
прерывается только один цикл. Вот как можно выйти из внешнего цикла:
outer: for (int i = 1; i <= n; i ) {
...
break outer;
Метка outer
произвольна — вы можете называть ее fred
так, как хотите.
Ответ №4:
int n = 6; // target
int i = 0;
int nextRowAt = 2;
int currentRow = 1;
while ( i <= n) {
if (i == nextRowAt) {
System.out.println();
nextRowAt = currentRow i;
}
System.out.print("" i " ");
}
Но если вы не понимаете этого и не можете правильно объяснить код, вы, вероятно, получите сбой при выполнении вашего задания.
Мое предложение состоит в том, чтобы начать с создания / понимания на ручке и бумаге. Выпишите последовательности и выясните, как должен работать алгоритм. ЗАТЕМ вы начинаете ее кодировать.
Ответ №5:
int sum =0;
int n =10;
// n------> number till where you want to print
boolean limtCrossed = false;
for (int i = 0; i < n amp;amp;!limtCrossed; i ) {
for(int j=0;j<=i;j ) {
sum ;
if (sum>n) {
limtCrossed = true;
break;
}
System.out.print( sum " " );
}
System.out.println("n");
}
Комментарии:
1. Не могли бы вы, пожалуйста, выделить основные аспекты вашего ответа и как это решает проблему?
Ответ №6:
public static void main(String[] args)
{
int n = 10;
int k = 1;
boolean breakOuter = false;
for (int i = 1; i <= n; i )
{
for (int j = 1; j <= i; j )
{
System.out.print(" " k);
if (n==k)
{
breakOuter = true;
break;
}
k ;
}
if(breakOuter) break;
System.out.println("n");
}
}
Комментарии:
1. Это … неэлегантно. Я не большой поклонник помеченных разрывов, но здесь было бы намного приятнее.
2. Помеченные разрывы кажутся своего рода базовыми во всех смыслах этого слова 🙂