Loading...
Vincent avatar Vincent 11 Точки

Ползване на метод (когато не го принтирам през Main не се показва)

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

Проблема ми е че мога да ползвам (изпринтирам информацията) новите методи, които генерирам само в Main метода. Ако си направя нов метод и пробвам през него да изпринтирам, програмате не гърми но и не показва нищо. Ето пример:

import java.util.Scanner;

public class Problem01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
            header(); // Принтира Header
    }
         public static void header(){
            System.out.println("Header");

    }
         public static void printHeader(){
             header(); // Не принтира нищо
    }

}

В прецентацията на слайд №9 е показано, че това може да стане. Аз ползвам java, но пробвах и в C# и също не ми се получи.

 

Тагове:
0
Programming Fundamentals 02/10/2017 20:02:51
martinml avatar martinml 297 Точки

При изпълнението на програмата се изпълнява автоматично main метода, ако чрез него не извикаш друг метод, то той няма да се изпълни. В твоя случай printHeader е неизползван. Това е код, който принтира "Header" два пъти:

import java.util.Scanner;

public class Problem01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        header(); // Извиква header() директно ( main() -> header() )
        printHeader(); //Извиква printHeader(), който извиква header() ( main() -> printHeader() -> header() )
    }
    public static void header(){
        System.out.println("Header");

    }
    public static void printHeader(){
         header(); 
    }

}

// Output:

// Header
// Header

 

1
02/10/2017 20:10:00
Vincent avatar Vincent 11 Точки

Благодаря за отговора! При това положение мога ли да разбирам, че за да се появи един метод изписан на конзолата, той тпябва да мине през Main метода задължително.

От слада в презентациятата изглежда по различно.

static void PrintHeader()

{

PrintHeaderTop();

PrintHeaderBottom();

}

Тези два метода дали минават през Main?

0
sevgin0954 avatar sevgin0954 557 Точки

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

1
martinml avatar martinml 297 Точки

На този слайд погледни Main() метода - той извиква PrintHeader(). Просто методите са парчета код, които могат да бъдат викани от друг код. Методите могат да викат и други методи, както в примера ти.

1
Vincent avatar Vincent 11 Точки

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

Появи се още една неяснота свързана с разликата в синтаксиса между C# и Java.

Това под C# работи

 static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            PrintHeader(n);
        }

        static void PrintHeader(int n)
        {
            Console.WriteLine(new String('-', 2*n));
        }
                    

А еквивалента му под Java не

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = Integer.parseInt(scanner.nextLine());

    printHeader(n);
}

public static void  printHeader (int n){
    System.out.println(new String('-', 2*n));
}

Ако може да ми кажете къде е разликата в синтаксиса която чупи кода в Java.

0
04/10/2017 12:42:19
martinml avatar martinml 297 Точки

В Java не можеш да ползваш new string(char, int), както в C#. Ползвай цикъл:

public static void printHeader(int n) {
    String header = "";
    for (int i = 0; i < 2 * n; i++) {
        header += '-';
    }
    
    System.out.println(header);
}

П.С. можеш да си форматираш кода и да го направиш по-четим с Ctrl + alt + L в IntelliJ Idea

0
04/10/2017 12:47:28
Vincent avatar Vincent 11 Точки

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

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.