Reputation: 1767
This is my code for my android app which isn't complete
package com.example;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText text;
private EditText text2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (EditText) findViewById(R.id.editText1);
text2=(EditText)findViewById(R.id.result);
}
// This method is called at button click because we assigned the name to the
// "OnClick property" of the button
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
RadioButton KelvinButton=(RadioButton) findViewById(R.id.radio2);
if (text.getText().length() == 0) {
Toast.makeText(this, "Please enter a valid number",
Toast.LENGTH_LONG).show();
return;
}
float inputValue = Float.parseFloat(text.getText().toString());
if (celsiusButton.isChecked()) {
text2.setText(String
.valueOf(convertFahrenheitToCelsius(inputValue)));
celsiusButton.setChecked(true);
} else {
text2.setText(String
.valueOf(convertCelsiusToFahrenheit(inputValue)));
fahrenheitButton.setChecked(false);
celsiusButton.setChecked(true);
if(KelvinButton.isChecked())
{
text2.setText(String.valueOf(convertoKelvin(inputValue)));
}
}
break;
case R.id.button2:
RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
RadioButton KelvinButton=(RadioButton) findViewById(R.id.radio2);
float inputValue = Float.parseFloat(text.getText().toString());
if (text.getText().length() == 0) {
Toast.makeText(this, "Please enter a valid number",
Toast.LENGTH_LONG).show();
return;
}
if (fahrenheitButton.isChecked()) {
text2.setText(String
.valueOf(convertFahrenheitToCelsius(inputValue)));
celsiusButton.setChecked(true);
} else {
text2.setText(String
.valueOf(convertCelsiusToFahrenheit(inputValue)));
fahrenheitButton.setChecked(true);
if(KelvinButton.isChecked())
{
text2.setText(String.valueOf(convertoKelvin(inputValue)));
}
}
break;
case R.id.button3:
RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
RadioButton KelvinButton=(RadioButton) findViewById(R.id.radio2);
float inputValue = Float.parseFloat(text.getText().toString());
if (text.getText().length() == 0) {
Toast.makeText(this, "Please enter a valid number",
Toast.LENGTH_LONG).show();
return;
}
if (KelvinButton.isChecked()) {
text2.setText(String
.valueOf(convertFahrenheitToCelsius(inputValue)));
celsiusButton.setChecked(true);
} else {
text2.setText(String
.valueOf(convertCelsiusToFahrenheit(inputValue)));
fahrenheitButton.setChecked(false);
celsiusButton.setChecked(true);
if(KelvinButton.isChecked())
{
text2.setText(String.valueOf(convertoKelvin(inputValue)));
}
}
break;
}
}
// Converts to celsius
private float convertFahrenheitToCelsius(float fahrenheit) {
return ((fahrenheit - 32) * 5 / 9);
}
// Converts to fahrenheit
private float convertCelsiusToFahrenheit(float celsius) {
return ((celsius * 9) / 5) + 32;
}
private float convertoKelvin(float celsius)
{
return ((celsius+273)) ;
}
}
As you can see i have defined my variables each time in very case.If i don't do this i get the error "The value might not have been initialised.What am i doing wrong.
If you were wondering,My code isn't complete.I am suck at this error and will continue once this is fixed
Upvotes: 1
Views: 491
Reputation: 19185
If I understood your question correctly If you assign values to celsiusButton
, fahrenheitButton
,KelvinButton
variables in only one case then you get error.
Reason why this happens is scope of the object initialization. Below is the sample which illustrates what is happening.
public void example() {
String str;
switch (1) {
case 1:
str = "test";// If I initalize here then there is problem since
// scope is limited to only this case
str.toString();
break;
default:
str.toString();// Compilation error here.
break;
}
}
public void example() {
String str = "test";
switch (1) {
case 1:
str.toString();
break;
default:
str.toString();// No error because scope of initialisation is whole
// method
break;
}
}
So you need to define your variables before switch (view.getId()) {
And resultant declaration will look like below
public void onClick(View view) {
RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
RadioButton KelvinButton=(RadioButton) findViewById(R.id.radio2);
switch (view.getId()) {
case R.id.button1:
Upvotes: 2
Reputation: 106498
If I'm understanding you correctly, then IntelliJ is warning you about a variable that you're using that may not have been properly initialized. At a glance, if onCreate()
isn't called before onClick()
, then text
and text2
would not be initialized. This could easily be a reason that IntelliJ is a confused.
Upvotes: 0