Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Решение на примери

Featured Replies

Както скоро писах започнах да се поинтересувам Джавата. Започнах да чета книгата на Наков.

И след като попрочета пиша примерите. Един пример обаче ми се опъна и стана чудно къде греша.

На скрийншота е показан примера. Понеже ми се видя увъртяно равенството х *= у или х = х*у от примера. Исках да си го уясня за мен, а не да повтарям като папагал само. Реших на мястото на първият Х да заместя с буквата К, за ад получа К=Х*У. Интересно, че ми даде грешка - всички точки, запетаи на мястото пък не става. Дава грешка още при създаваенто на файла тест2.клас.

Допълних един стринг (про примера на първо и второ име) не става.

Преправих го на плюс, вместо умножение, пак дава грешка.

Добавих скоби отново проблем.

Написах стринг с малка буква. Отново грешка.

Някой може ли да ми каже в крайна сметка къде е проблема?

Благодаря предварително!!!

javc.jpg

Въвел съм за параметъра К, непозната стойност А. След промяната и въвеждане на уравнението директно в редът "систем.аут" се получи. System.out.println(x+y);

Въпросът обаче остава, защо когато въведа този допълнително условие за К (к=х+у) и като извиквам параметъра К не ми се получава изпълнението на файла.

Грешно ли е да се извиква по такъв начин?

Решено. Стринг е за низове. Трябва да бъде въведен с int  и подобните в зависимост от стойността му.

преди 19 минути, ExaFlop написа:

k=a+y - a  не е декларирана никъде

Това е най - малкия проблем в случая, за съжаление ... :D

преди 50 минути, velinsl написа:

javc.jpg

1. Освен ако допълнително не е дефиниран клас с име "string", такъв тип в Java няма. Класовете е Java са Case-sensitive, което означава, че String != string. Най - малкото, вижте параметъра за main функцията - String[]

2. Операцията "+", извършена върху две променливи от тип "int" ще произведе резултат от тип "int". На ред 6-ти, Вие се опитвате да присвоите int на string (Едно, че е невалидно cast-ване, второ, че заради горната точка, нямате и дефиниран тип "string" - така получавате първата грешка от конзолата ...

3. Като допълнение на точка 2., оператора "+" е предефиниран да работи и за String обекти:

String number = "12" + "34"; => "1234"

- операцията е известна под името concatenation(слепване)

Нещата не свършват до тук обаче - "+" може да се използва за слепване на разнородни типове, ако първия операнд е от тип String. В този случай, за всички последващи операнди се извиква .toString() метода, който връща дефинирата им в текстов формат стойност:

String reallyOddString = "Hello " + 12 + new Integer(34); //"Hello 1234"

Реално, при изпълнение в JVM, горния ред се трансформира до следното:

String reallyOddString = "Hello " + new Integer(12).toString() + new Integer(34).toString();

 (boxing of primitive)  (implicit toString() call)    

String reallyOddString = "Hello " + "12" + "34"; //"Hello 1234"

Поздрави !

  • Автор

точно и аз това забелязах, но ми обедини отговорите. Благодаря за помоща все пак.

И още едно питане при следващият файл ми изписва "TRUE"

.........................................................................................................

class Test2 {
       public static void main(String[] arguments) {
           //Declare some variables
           String a = "Beer";
           int s = 2;
           System.out.println( a instanceof String );
      
      }
}

.........................................................................................................

Трябва ли при изпълнението на този файл

........................................................................................................

class Test2 {
       public static void main(String[] arguments) {
           //Declare some variables
           String a = "Beer";
           int s = 2;
           System.out.println( s instanceof String );
      
      }
}

..........................................................................................................

да ми дава "false"?

Защото не ми дава, а ми дава грешка в изпълнението.

Редактирано от velinsl (преглед на промените)

преди 3 минути, velinsl написа:

class Test2 {
       public static void main(String[] arguments) {
           //Declare some variables
           String a = "Beer";
           int s = 2;
           System.out.println( s instanceof String );
      
      }
}

да ми дава "false"?

Защото не ми дава, а ми дава грешка в изпълнението.

Цък

Накратко - когато компилатора има пряка видимост върху типовете, instanceof оператора ще произведе същатия резултат като cast-ването на променливата към типа за проверка (в случая - компилационна грешка):

int s = 2;
System.out.println( s instanceof String );// Compilation Error: Incompatible conditional operand types int and String
String sStr = (String)s;// Compilation error: Cannot cast from int to String

т.е. cast-ването ще даде компилационна грешка, което означава, че и instanceof ще направи компилационна грешка, когато компилатора уверено определи типовете на променливите (т.е. s не може да никакъв друг тип, освен int или друг клас, наследяващ int ).

Забележка: int е примитивен тип, така, че фактически няма как да говорим за наследяване специално за него.

Пример, който взема под внимание случая е този:

Number n = new Integer(200);
System.out.println( n instanceof String ); //Compilation Error: Incompatible conditional operand types Number and String

Именно защото Number и String нямат никакви пресечни точки в йерархията си, компилатора много добре разбира, че n никога не може да бъде от тип/подтип на String и директно дава грешка (отново - по подобие на опит за извършване на cast-ване).

Поздрави !

  • Автор

Идеята ми беше след първата програма след като отговори "трю" - файла принадлежи на масива.

Вторият да отговори "грешка! не принадлежи на масива".

БЛагодаря за изнесената лекция. Точно преди малко прочетох за това конкрет... слепване на низове.

Редактирано от velinsl (преглед на промените)

преди 20 часа, velinsl написа:

Идеята ми беше след първата програма след като отговори "трю" - файла принадлежи на масива.

Вторият да отговори "грешка! не принадлежи на масива".

Може да се постигне. Но ще трябва да се модифицира кода:

class Test2 {
	public static void main(String[] argument) {
		//Declare some variables
        String a = "Beer";
        Object s = 2;
        System.out.println( s instanceof String );
	}
}

Но Ви оставям за домашно да помислите защо този вариант на програмата работи.

Реално, промених типа на да бъде Object, след което присвоявам 2. Помислете в случая кой е реалния (Runtime) тип на променливата s след този ред.

Като подсказване, Ви давам следния код (отново ще имаме false):

public static void main(String[] argument) {
    //Declare some variables
    String a = "Beer";
    Number s = new Double(2.0);
    System.out.println( s instanceof Integer );
}

и следната диаграма:

help2.png

Поздрави !

Редактирано от soundtracker (преглед на промените)

  • 2 седмици по-късно...
  • Автор

Някой друг изучавал ли е Джавата по тая книга?

Имах се за сравнително интелигентно земно същество. Обаче по тази книга когато достигах до страница 124 на учебника не мога да нарпавя и една задачка-закачка.

Аз ли съм толкова тъп или действително учебникът не предлага достатъчно базови знания за решаване на конкретните задачи - нито една?

Аиде първата теоретично се досетих и без да им чета указанията. Обаче не мога да го пресъздам като програма.

Нека да се има впредвид, че започвам от АБ с този учебник. Известно време попочинах малко и сега достигнах до тук.

Редактирано от velinsl (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.