Yaswanth Kummar Ответов: 1

Что было не так в моем коде


Мой вывод выглядит следующим образом :
5
1 3 5 7 9
1
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: индекс 5 выходит за пределы длины 5
в myproject/myproject.MainExam3.main(MainExam3.java:35)
3
5
7
9

Ожидаемый:
5
1 3 5 7 9
1
3
5
7
9
возрастающий порядок

Что я уже пробовал:

package myproject;
import java.util.*;

public class MainExam3 {
	
	public static void main(String args[]) {
		
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		
		int[] a = new int[n];
		for(int i=0; i<n; i++)
		{
			 a[i] = sc.nextInt();
		}
		int temp = 0;
		for(int i=0; i<a.length; i++) 
		{
			for(int j=i+1; j<a.length; j++)
			{
				if(a[i]>a[j])
				{
					temp = a[i];
					a[i] = a[j];
					a[j] = temp;
					
				}
			}
		}
		
		int flag = 0;
		for(int i=0; i<a.length; i++) 
		{
			System.out.println(a[i]);
			if(a[i]>a[i+1])
			{
		        flag=1;
		        break;
			}
		}
			if(flag==1)
			{
				System.out.println("asc order");
			}
			else if(flag==0)
			{
				System.out.println("not asc order");
			}
	}
		
}

Gerry Schmitz

Добавьте 7 и измените сообщение.

ZurdoDev

В чем заключается ваш вопрос?

1 Ответов

Рейтинг:
0

Patrice T

for(int i=0; i<a.length-1; i++)
{
    System.out.println(a[i]);
    if(a[i]>a[i+1])
    {
            flag=1;
            break;
    }
}

Это никогда не будет печатать последнее число из-за a.length-1, но вам это нужно для сравнения элементов.
if(flag==1)
{
    System.out.println("asc order");
}
else if(flag==0)
{
    System.out.println("not asc order");
}

Может быть, тест идет в неправильном порядке.
Цитата:
Что было не так в моем коде

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

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

[Обновление]
Эта петля
for(int i=0; i<a.length; i++)
{
    System.out.println(a[i]);
    if(a[i]>a[i+1])
    {
        flag=1;
        break;
    }
}

делает 2 разные вещи, 1 нужно сделать петлю 5 раз, другой должен сделать петлю только 4 раза.


CPallini

5.

Patrice T

Спасибо