2013-12-26 3 views
0

Я новичок в программировании, и я проводил некоторое время с Android. Я пытаюсь сделать простое приложение (только один простой класс), который вычисляет то, что вам нужно, чтобы попасть в ваш финал, чтобы получить определенный класс в классе. В 5-й линии, где я назначить кнопку calculate, я получаю сообщение об ошибке: «Несколько маркеров на этой линииПочему Java думает, что этот метод объявлен, а не вызван?

- Return type for the method is missing 
- Syntax error, insert ";" to complete 
FieldDeclaration 
- Syntax error on token ".", ... expected 
- Syntax error on token ")", { expected after this 
token" 

Я был в состоянии успешно скомпилировать что-то очень похожее, но я не могу вспомнить, что Я изменил, чтобы не работать Вот мой простой класс:. любая помощь глубоко признателен

public class MainActivity extends Activity implements View.OnClickListener { 

Button calculate; 
EditText grade, wantedGrade, finalValue; 
calculate = (Button) findViewById(R.id.button1); 

grade = (EditText) findViewById(R.id.editText1); 
wantedGrade = (EditText) findViewById(R.id.editText2); 
finalValue = (EditText) findViewById(R.id.editText3); 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

/** calculates the grade and alerts the result */ 
public void reCalc(View view) 
{ 

    // calculate the grade 
    // (TotalGrade - (currentGrade * .8))/.2) = finalGrade 
    // where .8 and .2 are the values of the normal semester 
    // weight and final weight, respectively 
    double target; 
    double current = Double.parseDouble(grade.getText().toString()); 
    double desired = Double.parseDouble(wantedGrade.getText().toString()); 
    double finalWeight = Double.parseDouble(finalValue.getText().toString())/100; 
    double normalWeight = 1.0 - finalWeight; 


    target = (desired - (current * normalWeight))/finalWeight; 

    AlertDialog gradeMessenger = new AlertDialog.Builder(this).create();  
    gradeMessenger.setMessage("You need a " + target + " percent on the final to get a " + desired + " in the class."); 
    gradeMessenger.setCancelable(true); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

}} 

EDIT: я в настоящее время не имею достаточно репутации до голосования всех вас, но теперь это здорово работает, спасибо за помощь. Я очень благодарен.

+0

Не делайте этого 'finalValue = (EditText) findViewById (R.id.editText3); 'как инициализатор поля. Он вернет 'null'. –

ответ

1

Изменения в

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // initialize after setContentview 
    calculate = (Button) findViewById(R.id.button1); 

    grade = (EditText) findViewById(R.id.editText1); 
    wantedGrade = (EditText) findViewById(R.id.editText2); 
    finalValue = (EditText) findViewById(R.id.editText3); 

} 

findViewById выглядит для представления с идентификатором в текущем надутом макете. Поэтому вам нужно инициализировать представления после setContentView.

Также я предполагаю, что у вас есть

android:onClick="reCalc" in xml for button 

Так что нет необходимости в вашей деятельности по реализации OnClickListener и удалить

@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 

} 
0

все задания/выражения в Java должны быть inside a block (кроме инициализаций)

Вы назначаете

calculate = (Button) findViewById(R.id.button1); 

grade = (EditText) findViewById(R.id.editText1); 
wantedGrade = (EditText) findViewById(R.id.editText2); 
finalValue = (EditText) findViewById(R.id.editText3); 

outside any code block, на уровне класса. это неправильный синтаксис. также вы должны иметь в виду, что даже если бы это было разрешено, ваш макет еще не был бы завышен, и эти значения были бы нулевыми,

так что вы должны shift the statements to OnCreate, где вы впервые установили представление контента, затем вызовите эти инструкции:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    calculate = (Button) findViewById(R.id.button1); 

    grade = (EditText) findViewById(R.id.editText1); 
    wantedGrade = (EditText) findViewById(R.id.editText2); 
    finalValue = (EditText) findViewById(R.id.editText3); 

} 
1

onCreate() будет звонить, когда запуск приложения, как вы можете увидеть Android Lifecycle.

Вы должны реализовать этот метод. Система вызывает это при создании вашей активности. В рамках вашей реализации вы должны инициализировать основные компоненты своей деятельности. Самое главное, здесь вы должны вызвать setContentView(), чтобы определить макет для пользовательского интерфейса активности.

Ваша ошибка в том, что вы инициализируете свое представление до того, как создаете действие, чтобы он выкинул ошибку.

Даже Eclipse подскажет вам, что у вас есть Синтаксическая ошибка и все, что вы упомянули. Таким образом, вы можете объявить объект вида вне onCreate(), но вы должны инициализировать в OnCreate().

Просто изменить

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
.... 
grade = (EditText) findViewById(R.id.editText1); 
wantedGrade = (EditText) findViewById(R.id.editText2); 
finalValue = (EditText) findViewById(R.id.editText3); 
.... 
} 
Смежные вопросы