Я правильно вызвал?

#java #methods #invoke

#java #методы #вызвать

Вопрос:

Мне был предоставлен фрагмент кода (класс QuestionTwo). Меня просят указать значения a, b и c после вызова метода mQ2 для вновь созданного объекта класса Q2.

Мой main.java файл

 package openuniversity;

public class Main
{
  public static void main(String[] args)
  {
    QuestionTwo qt = new QuestionTwo();
    qt.mQ2();
  }
}
  

Мой QuestionTwo.java файл класса:

 package openuniversity;

public class QuestionTwo
{
  int a;
  int b = 1;

  public void mQ2()
  {
    {
      int c;
      int a = 2;
      c = a;
    } 

    {
      int c;
      int a;
      c = 3;
      a = 4;
    }

    a  ;

  }
}
  

Я пришел к:

 a: 1
b: 1
c: 3
  

Обратите внимание, что я также могу выбрать «неопределенный» в качестве ответа?
Так будет ли это 1, 1, не определено, поскольку c не существует вне codeblock?

Вопрос:

Изучите следующий код, а затем выберите параметры из выпадающих списков ниже, которые соответствуют правильным значениям a, b и c после того, как метод mQ2 будет вызван один раз для вновь созданного объекта класса Q2. Обратите внимание, что ответы, которые вы выбираете для a, b и c, могут отличаться или не отличаться друг от друга.

 public class Q2
{
    int a;
    int b = 1;

    public void mQ2()
    {
        {
            int c;
            int a = 2;
            c = a;
        }
        {
            int c;
            int a;
            c = 3;
            a = 4;

            System.out.println("c: "   c);  //correct place?  
        }
        a  ;
    }
    System.out.println("a: "   a   "b: "   b);  // correct place?
}
  

Комментарии:

1. Как вы к этому пришли? Вы думали о том, как вы можете проверить / опровергнуть свое утверждение?

2. Ваш вопрос на самом деле не имеет смысла для меня. Обратите внимание, что здесь есть как локальные, так и переменные класса. Локальные переменные фактически перестают существовать при завершении функции, поэтому на самом деле они не имеют значения IMO.

3. Если вы объявляете переменную в block ( { ... } ), она перестает существовать после завершения этого блока. Таким образом, существует несколько различных переменных с именем a and c , и, как сказал Адриан c , после mQ2() запуска не выполняется.

4. Вопрос, IMO, просто создан для того, чтобы сбить меня с толку и проверить, понимаю ли я блоки кода и локальные переменные, я думаю. Я отредактирую свой пост, чтобы задать вопрос точно так, как он у меня есть, внизу.

Ответ №1:

Поскольку это домашнее задание, я ограничу свой ответ парой указателей.

  1. Вы можете проверить свое решение, распечатав переменные после вызова mQ2() (подсказка: вы могли бы использовать System.println() для этого).
  2. Это либо вопрос с подвохом, либо частично неверно определен (подсказка: подумайте о чем a , b и особенно c о том, о чем вас спрашивают).

Комментарии:

1. Спасибо за ваши советы, я ценю их. Мое замешательство в том, куда ИМЕННО поместить мой System.out.println? Я бы поставил (a b) чуть выше последней фигурной скобки? и (c) под где a= 4?

2. Вы должны распечатать их из своего собственного класса (для переменных не указаны public / private, поэтому по умолчанию они имеют значение protected, что означает, что у вас будет доступ, пока вы находитесь в том же пакете), или просто создайте отдельный метод toString() в классе question, который печатает a / b(который вы можете вызвать из последней строки mQ2). Вы можете печатать c только внутри метода mQ2, но я предполагаю, что это часть вопроса — он не имеет значения, потому что он не существует после выполнения метода .

3. Спасибо aix, я ценю, что ты помогаешь!

Ответ №2:

Я бы посоветовал вам сначала распечатать все значения с помощью System.out.println() после вызова mQ2, затем мысленно просмотрите код, чтобы попытаться понять, почему значения такие, какие они есть. Помните, что любая объявленная переменная видна только в пределах области видимости ( {...} для простоты), но эти переменные могут иметь то же имя, что и другие переменные, поэтому они могут выглядеть одинаково, даже если это не так.

Я хотел бы особо отметить, что c не существует вне этого метода.

Комментарии:

1. Спасибо за вашу помощь, Тор, это ценится 🙂