#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
andc
, и, как сказал Адрианc
, послеmQ2()
запуска не выполняется.4. Вопрос, IMO, просто создан для того, чтобы сбить меня с толку и проверить, понимаю ли я блоки кода и локальные переменные, я думаю. Я отредактирую свой пост, чтобы задать вопрос точно так, как он у меня есть, внизу.
Ответ №1:
Поскольку это домашнее задание, я ограничу свой ответ парой указателей.
- Вы можете проверить свое решение, распечатав переменные после вызова
mQ2()
(подсказка: вы могли бы использоватьSystem.println()
для этого). - Это либо вопрос с подвохом, либо частично неверно определен (подсказка: подумайте о чем
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. Спасибо за вашу помощь, Тор, это ценится 🙂