PDA

View Full Version : Още една задачка от Java, не решение а алтернатива :)



Darkbound
04-25-2011, 11:43
Такаа задачката съм я решил, но е ясно, че не е както се иска от условието, а то е:

Напишете програма която чете от конзолата две цели числа и извежда по голямото от тях. Не използвайте сравнение.

Упътване: Нека числата са а и б. (а=а-б), (б=а+б), (а=б-а)

Моето решение:



import java.util.Scanner;
public class glava4zadacha4

{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter the first number: ");
long a = input.nextLong();
System.out.println("Enter the second number: ");
long b = input.nextLong();
System.out.println((a-b) == (b-a)? "They are equal" : "They are not equal");
System.out.println((a-b) > (b-a) ? "a is bigger than b" : "b is bigger than a");
}

}


Само, че и моето май не е пълно решение защото ако числата са равни конзолата извежда:

They are equal
b is bigger than a

Та моля за малко помощ как да я направя по условието на задачата :)

lmao
04-25-2011, 12:24
изкарва ти две неща, защото оператора който си използвал, винаги изкарва нещо, като са ти равни числата, от първото изкарва, че са равни, на второто условие е false,и ти извежда че b е по-голямото.
предлагам ти да не се задълбаваш много на точно тоя тип задачи, защото не са от особена важност. това което ти е дадено като упътване, по принцип е за размяна на две стойностите на две числа, без изпозлване на временна трета променлива, не виждам защо е дадено като упътване

selenium
04-25-2011, 12:34
import java.util.Scanner;
public class glava4zadacha4

{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter the first number: ");
long a = input.nextLong();
System.out.println("Enter the second number: ");
long b = input.nextLong();
System.out.println((a-b) == (b-a)? "They are equal" : "They are not equal");
System.out.println((a-b) > (b-a) ? "a is bigger than b" : "b is bigger than a");
}

}



Защо ти излиза некоректно решение:
Фокусираме се върху последните два реда System.out.println ...
В твоя случай кода се изпълнява линейно, тоест както си го написал така си върви. Съзвадаш някакъв скенер, взимаш две числа и проверяваш дали разликата им е еднаква. Ако да - "They are equal", ако не - "They are not equal".
След това програмата изпълнява следващия ред - разликата а-б е по-голяма от б-а. Това вярно ли е, ами не е вярно. Ако е вярно пише - "a is bigger than b", ако не е вярно пише - "b is bigger than a".
Къде е проблема:
Ако е вярно че (a-b) == (b-a), то може ли в същото време (a-b) > (b-a). Еми не може. Тогава необходимо ли е да го проверяваме? Еми не.
Как да то оправиш:
Примерно с if


if ((a-b) == (b-a)) {
System.out.println("They are equal");
} else {
System.out.println("They are not equal");
/*( и сравняваш кое е по-голямото )*/
}

Darkbound
04-25-2011, 13:40
Вижте, ясно ми е защо получавам този отговор.

Както казахте от второто println ми дава false защото условието не е изпълнено и тъй като булевите стойности имат само true и false и нямат трета стойност която да използвам ако отговора е да са равни незнам как да го направя.

Нямам представа какво казах по-горе така че го игнорирайте. :D:D

В условието на задачата дори нямам да добавя това ако са равни числата незнам защо си усложнявам живота ( както винаги ) .

Стигнах до това:



import java.util.Scanner;
public class glava4zadacha4

{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter the first number: ");
long a = input.nextLong();
System.out.println("Enter the second number: ");
long b = input.nextLong();

if ((a-b) < (b-a))
{
System.out.println("b is bigger than a");
}
else
{
System.out.println("a is bigger than b");
}
}

}




Само, че условието на задачата е да направим програмата БЕЗ да използваме сравнение <,>,= предполагам че тези знаци имат в предвид под сравнение както и if else които също са булеви стойности. С тяхното използване горният код е правилен според мен, има ли начин да стане без тях?

Darkbound
04-25-2011, 17:49
Напишете програма която извежда най-голямото от три числа.
Упътване: използвайте вложено if



import java.util.Scanner;
public class glava5zadacha3

{

public static void main(String[] args)

{
Scanner input = new Scanner(System.in);

System.out.println("First numb: ");
int a = input.nextInt();
System.out.println("Second numb: ");
int b = input.nextInt();
System.out.println("Third numb: ");
int c = input.nextInt();

if (a>b & c)
{
if (b>a & c)
{
System.out.println("b e nai golqmoto");
}
System.out.println("a e nai golqmoto");
}
else
{
System.out.println("c e nai golqmoto" + c);
}
}

}


Това е втората ми идея която е грешна също като първата, а първата беше (a>b>c) и (b>a>c) но там също ми дава грешка, помислих си, че с логическото И (&) ще стане номера ама пак не стана..

lmao
04-25-2011, 18:01
просто не се пише така. това което си написал в момента е побитово "и"

трябва да ти е if ((a>b) && (a>c))...

и общо взето не ти е вярна конструкцията. предлагам ти първо да го направиш просто с 3 отделни иф-а и после да мислиш как да ги комбинираш

Darkbound
04-25-2011, 19:35
int max = a;
if(max<b) b=max;
if(max<c) c=max;

:)