Показать три неотрицательных целых числа в порядке возрастания - PullRequest
0 голосов
/ 07 февраля 2011

Предложите пользователю ввести три неотрицательных целых числа.Отображать целые числа в порядке возрастания.

import java.util.Scanner;

{
    int number1,number2,number3;
         Scanner keyboard = new Scanner (System.in);
         number1=keyboard.nextInt();
         number2=keyboard.nextInt();
         number3=keyboard.nextInt();

        if(number1<number2&&number1<number3&&number2<number3)
        {
            System.out.println(number1);
            System.out.println(number2);
            System.out.println(number3);
        }

        else if(number1>number2&&number1>number3&&number2>number3)
        {
            System.out.println(number3);
            System.out.println(number2);
            System.out.println(number1);
        }

        else if(number1<number2&&number1<number3&&number2>number3)
        {
            System.out.println(number1);
            System.out.println(number3);
            System.out.println(number2);
        }

        else if(number2>number1&&number2>number3&&number1>number3)
        {
            System.out.println(number3);
            System.out.println(number1);
            System.out.println(number2);
        }

        else if (number3>number1&&number3>2&&number1>number2)
        {
            System.out.println(number2);
            System.out.println(number1);
            System.out.println(number3);
        }

Вывод:

2 1 3

1 2 3

PS Мне запрещено использоватьВ то время как заявление, качели и для.Я новичок в Java, так что это то, что я мог придумать.Есть ли более быстрый способ?Спасибо.

Ответы [ 5 ]

2 голосов
/ 07 февраля 2011

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

public static void main(String[] args) {


 int number1,number2,number3;
 Scanner keyboard = new Scanner (System.in);
 number1=keyboard.nextInt();
 number2=keyboard.nextInt();
 number3=keyboard.nextInt();

 int temp;

 if (number2 < number1){
     temp = number2;
     number2 = number1;
     number1 = temp;
 }

 if (number3 < number2){
     temp = number3;
     number3 = number2;
     number2 = temp;
 }

 if (number2 < number1){
     temp = number2;
     number2 = number1;
     number1 = temp;
 }
  System.out.println(number1);
  System.out.println(number2);
  System.out.println(number3);

}
0 голосов
/ 07 февраля 2011
boolean n2 ;   
if(num1>num2) {
    if(num1>num2 && num1>num3){
        if(num2>num3){
            System.out.println(num1+">"+num2+">"+num3);
            n2=true;
        }
        else {
            System.out.println(num1+">"+num3+">"+num2);
        }
    }
    else if(n2){
        if(num1<num3){
            System.out.println(num2+">"+num3+">"+num1);
        }
    }
}
else {
    System.out.println(num2+">"+num1+">"+num3);
}
0 голосов
/ 07 февраля 2011

Поскольку это домашнее задание, я думаю, что вложенное, если с его , иначе , было бы более чистым решением. Он также работает правильно с равными значениями, отрицательными значениями и не меняет значения переменных. : -)

    int number1, number2, number3;
    Scanner keyboard = new Scanner(System.in);

    number1 = keyboard.nextInt();
    number2 = keyboard.nextInt();
    number3 = keyboard.nextInt();

    if (number1 < number2) {
        if (number2 < number3) {
            System.out.println("123 " + number1 + number2 + number3);
        } else {
            if (number1 < number3)
                System.out.println("132 " + number1 + number3 + number2);
            else
                System.out.println("231 " + number3 + number1 + number2);
        }
    } else {
        if (number3 < number2) {
            System.out.println("321 " + number3 + number2 + number1);
        } else {
            if (number3 < number1)
                System.out.println("312 " + number2 + number3 + number1);
            else
                System.out.println("213 " + number2 + number1 + number3);
        }
    }
0 голосов
/ 07 февраля 2011

Скорость не проблема. Правильность есть. Что произойдет, если число 1 и число 3 равны? Тем не менее, вот более компактная часть логики, которая должна быть довольно эффективной.

if (number2 < number1)
{
    temp_number = number1;
    number1 = number2;
    number2 = temp_number;
}

if (number3 < number2)
{
    temp_number = number2;
    number2 = number3;
    number3 = temp_number;

    if (number2 < number1)
    {
        temp_number = number1;
        number1 = number2;
        number2 = temp_number;
    }
}

System.out.println(number1);
System.out.println(number2);
System.out.println(number3);
0 голосов
/ 07 февраля 2011

Ваш путь достаточно быстр для трех чисел, но что произойдет, если при следующем задании вам потребуется выполнить ту же задачу в списке из 10 целых чисел? Или 100? Или 1 000 000?

Продолжая изучать программирование, вы поймете, что эффективность стратегии, выбранной вами для решения проблемы (алгоритма), может сильно различаться в зависимости от размера входных данных. Стратегия, которую вы выбрали при попытке решить эту проблему, состояла в том, чтобы перечислить все способы, которыми три числа могут соотноситься по размеру - не так уж плохо, поскольку их всего шесть, - но даже для десяти чисел существуют миллионы способов! Лучшим выбором алгоритма было бы хранить их в структуре, где их размер увеличивается от элемента к элементу (путем их сортировки), поскольку большинство алгоритмов сортировки по-прежнему будут работать хорошо с очень большими входными наборами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...