Yaswanth Kummar Ответов: 4

Что было не так в моем коде..восходящая программа


Всегда печатайте заказ asc

Мой вывод выглядит следующим образом
5
6 5 4 3 9
заказать АСК

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

package myproject;
import java.util.*;

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

4 Ответов

Рейтинг:
2

Sandeep Mewara

2 вещи:
1. Не уверен, что именно вы пытаетесь сделать с вводом в середине алгоритма сортировки
2. Вы пытаетесь отсортировать выборку (например, с помощью i &j), а затем сравниваете элементы, используя только i. В целом, ваша логика сортировки неверна

Предполагая, что вы хотите просто сказать, что входные данные находятся в порядке возрастания или нет, следующее должно работать (на основе вашей логики кода):
1. сначала примите входные данные
2. Применять логику сортировки
3. установите флаг, если он найден не отсортированным (уже по возрастанию)
4. основываясь на флаге, скажите, был ли вход восходящим или нет

Я постарался внести как можно меньше изменений в ваш код. Для флага следует использовать логическую переменную.

import java.util.*;

public class MainAscOrNot {
	
	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();
		    System.out.println(a[i]);
		}
		
		int t = 0;
		for(int i=0; i<n-1; i++)
		{
			for(int j=i+1; j<n; j++)
			{
			    if(a[i] > a[j])
			    {
				    t=1;
				    break;
			    }
			}
	    }
	    if(t==0)
	    {
		    System.out.println("asc order");
	    }
	    else
	    {
		    System.out.println("not asc order");
	    }
	}
}

P.S.: В оригинале вы можете просто проверить, принимая входные данные один за другим, и посмотреть, меньше ли следующий вход, чем последний, и если да, то сохранить логический флаг, установленный как не отсортированный по возрастанию. позже используйте флаг для сообщения в конце. Я не разделяю это решение здесь.


Patrice T

"2. примените логику сортировки"
ему не нужно сортировать, просто проверьте, если данные отсортированы или нет.

Sandeep Mewara

Да, это было для того, чтобы объяснить ОПУ, что он пытается сделать.

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

:большой палец вверх:

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

Рейтинг:
2

Richard MacCutchan

Немного более простое решение:

Scanner sc = new Scanner(System.in);
int last = 0;
int n = sc.nextInt();
for(int i=0; i < n; i++)
{
    int next = sc.nextInt();
    if(next < last) {
        last = 0;
        break;
    }
    else {
        last = next;
    }
}
if(last==0)
{
    System.out.println("not asc order");
}
else
{
    System.out.println("asc order");
}


Рейтинг:
1

OriginalGriff

Потому что вы никогда не меняете значение t - единственное место, где вы устанавливаете значение, - это когда вы его определяете:

int t = 0;
А когда вы его установите:
if(a[i]>a[i+1])
{
    t=0;
}
Поскольку он начинается с нуля, а вы только устанавливаете его на ноль, он никогда не будет равен ничему, кроме нуля.


Рейтинг:
1

Patrice T

Цитата:
Что было не так в моем коде..восходящая программа

Вы перечитали свой код ?
package myproject;
import java.util.*;

public class MainAscOrNot {
	
	public static void main(String args[]) {
		
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		
		int[] a =  new int[n];
		
		int t = 0;
		for(int i=0; i<n-1; i++)
		{
			for(int j=i+1; j<n; j++)
			{
			    a[i] = sc.nextInt();
		
			    if(a[i]>a[i+1])
			    {
				    t=0; // a problem can be there for 'asc order' message
				   
			    }
			}
		    if(t==0)
		    {
			    System.out.println("asc order");
		    }
		    else
		    {
			    System.out.println("not asc order");
		    }
			
	    }
	}
}

но весь код не имеет смысла, отладчик сразу же покажет его вам.
Совет: Не пытайтесь комбинировать разные части кода только для того, чтобы сохранить несколько строк.
Сначала сделайте правильный, когда вы уверены, что любая вещь работает, вы можете подумать о группировке похожих частей. Использовать комментарии.
Заполните отверстия, ничего не группируйте, пока программа не заработает:
package myproject;
import java.util.*;

public class MainAscOrNot {
	
	public static void main(String args[]) {
		
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		
		int[] a =  new int[n];

		// read user input in array

		// print user input (just to make sure reading was correct)

		// check if asc order

		// send answer message
	    if(t==0)
	    {
		    System.out.println("asc order");
	    }
	    else
	    {
		    System.out.println("not asc order");
	    }
	}
}

Я думаю, что вы должны поговорить со своим учителем, строка за строкой, у вас есть в основном правильные строки, но вы выглядите так, чтобы собрать их вместе почти случайно.
Формируйте строки кода 1 на 1, вы показываете понимание того, что вам нужно, но с точки зрения всего кода вы не понимаете, как собрать вещи вместе.