Operater '*' cannot be applied to 'android.widget.RadioButton', 'int'
I'm creating an app that is for the cost of printing paper using radio buttons with a 20 paper limit.
I'm unsure as to why i'm getting this error as i'm grabbing getting the information from my EditText.
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import java.text.DecimalFormat;
public class MainActivity extends Activity {
double totalcost;
double price1 = 0.15;
double price2 = 0.45;
double price3 = 0.80;
int prints;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setLogo(R.mipmap.ic_launcher);
getActionBar().setDisplayUseLogoEnabled(true);
final EditText prints =(EditText)findViewById(R.id.noprint);
final RadioButton price1 = (RadioButton)findViewById(R.id.rad1);
final RadioButton price2 = (RadioButton)findViewById(R.id.rad2);
final RadioButton price3 = (RadioButton)findViewById(R.id.rad3);
final TextView totalcost =(TextView)findViewById(R.id.cost);
Button calculate =(Button)findViewById(R.id.btn1);
calculate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String prints = noprint.getText().toString();
int prints = Integer.parseInt(noprint);
DecimalFormat tenth = new DecimalFormat("$##.##");
if (price1.isChecked()) {
if (prints <= 20) {
totalcost = price1 * prints;
} else {
Toast.makeText(MainActivity.this, "Number of prints must be less than 20", Toast.LENGTH_LONG).show();
}
}
Looking at your program, you have a naming problem. On class-level, you define an attribute
double price1 = 0.15;
but within method onCreate(...) you also define
final RadioButton price1 = (RadioButton)findViewById(R.id.rad1);
which effectively hides the attribute. Thus, when you write
totalcost = price1 * prints;
You command java to multiply a RadioButton with an int. Since this binary operator (*(RadioButton, int)) is undefined in Java, you get the compiler error you got. Your intention is probably to use the attribute price1. A quick fix would be to expicitly use the attribute through the this reference:
totalcost = this.price1 * prints;
A cleaner fix would be to rename your variables so you do not hide the attribute with the local variable.
I'm new to android development, I trying to create a simply Pythagorean Calculator, I need help with reading if a lines blank, but still calculates instead of failing.
Here is my code
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText sideAObj;
private EditText sideBObj;
private EditText sideCObj;
private EditText outputObj;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sideAObj = (EditText) findViewById(R.id.SideAInput);
sideBObj = (EditText) findViewById(R.id.SideBInput);
sideCObj = (EditText) findViewById(R.id.SideCInput);
outputObj = (EditText) findViewById(R.id.OutputText);
}
public void calculateClick(View v){
try {
double sideA = Double.parseDouble(sideAObj.getText().toString());
double sideB = Double.parseDouble(sideBObj.getText().toString());
double sideC = Double.parseDouble(sideCObj.getText().toString());
if (sideAObj.getText().toString().equalsIgnoreCase("0")) {
double pt = Math.sqrt((sideC * sideC) - (sideB * sideB));
outputObj.setText(String.format("%.2f", pt));
}
}
catch (NumberFormatException ex){
Toast errMess = Toast.makeText(getApplicationContext(),"Enter Numbers Only",Toast.LENGTH_SHORT);
errMess.show();
outputObj.setText(String.format("%2.f",0.00));
return;
}
}
public void clearClick(View v){
sideAObj.setText("");
sideBObj.setText("");
sideCObj.setText("");
outputObj.setText("");
sideAObj.requestFocus();
}
}
My program will calculate if their is a Zero on 1 line, but if I leave it blank the program fails entirely, whats the best way to prevent that.
It will obviously fail as it doesn't know how to parse a blank value into a double. Just use something like this during instantiation itself:
double sideB = (sideBObj.getText().toString() == "") ? 0 : (Double.parseDouble(sideBObj.getText().toString()));
double sideC = (sideCObj.getText().toString() == "") ? 0 : (Double.parseDouble(sideCObj.getText().toString()));
Basically, you will be assigning the value 0 if the edit text field is 0 else, you will parse the value entered to a double.
Assuming you want to consider a 0 if there is a blank edit text field.
========================================================================
UPDATE
if(sideAObj.getText().toString() != ""){
double sideA = Double.parseDouble(sideAObj.getText().toString());
}
The simple solution for this problem would be to check each edittext whether they are blank or not and then perform the task.
Get the value of each Edittext to a int variable and then use loop and with the help of edittext.length() method verify if it is equal to 0, if yes, then assign a value to 0 to a new global variable, else assign the exact value to global variable.
and then perform the calculation with the new variables.
Sample code for better understanding :-
String a = et.getText().toString();
int l = a.length();
if (l == 0){
// set the value of global variable = 0;
} else {
// set the value of global variable = a {Actual Digit}
}
On running the application, it displays an error as"Unable to start activity.. ComponenInfo" with length =64 and index=64 and the app crashes. Is there any solution to it?
package com.mayank.app.quizoclash;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class game extends AppCompatActivity implements View.OnClickListener {
private TextView ques, score, quesno,time;
Button opt1, opt2, opt3, opt4,image;
String phone,phone1,name,college,regno;
int count1=0;
int count=0;
int i=0,j=0,k=1;
private String[] question={"What was Slade Wilson's alter ego?","What is the name of this episode?","Which Dire-wolf belonged to Robb?","What is the color of the couch in the coffee shop in F.R.I.E.N.D.S?","How does Sherlock first have his coffee?","Who told the Flash to wear a mask or suit?","What is Kristy Stapleton's rabbit called?",
"What was the name of Monica's Boyfriend who was an alcoholic","What are Daenerys Dragons called","Phoebe changes her name to?","In How I Met Your mother, What is Robin's occupation?","How many friends does Sheldon have on MySpace?(BBT)","Rachel gets a tattoo. What is it?","Which man did this woman go on a date with?",
"In the series \"Arrow,\" who is character Oliver Queen's best friend?","What two characters featured prominently in the TV series did not appeear in the comics version?(The Walking Dead)","This police inspector regularly calls on Holmes to help solve difficult cases.","In what drug (now illegal) was Holmes known to imbibe, from time to time.",
"Who does Sheldon believe has an \"unresolved Oedipus complex\"?(BBT)","What card did Joey think was stolen by the guy who robbed the apartment?","What is \"Arrow\" character John Diggle's profession?","What is the setting for Holmes and Moriarty's final, fatal encounter?","What instrument does Leonard play?(BBT)","How many blocks was Rachel's childhood dog LaPooh dragged?",
"What was T-Dog's real name?(The Walking Dead)","What is Daredevil's alter ego?","What phrase did the Arrow use when he questioned someone on his father's list?","In Season 2, who is the manager of Central Perk?(Friends)","Where did Amy go to college?(BBT)","How did Holmes describe himself professionally?","Unlike many superheroes, Daredevil is deeply religious. What is his faith?",
"Which girl did this guy date?","What was the pendant on the necklace Andrea planned to give Amy for her birthday?","What catastrophic event was the Undertaking, that destroyed a large part of The Glades?","What was the London address of the famous sleuth and his faithful companion, Dr. Watson?","Halfway through the movie, Colin Farrell is introduced as Kingpin's assassin of choice. What is the name of his character, who \"can turn anything into a weapon\"?","In \"The One With the Lottery,\" what is the power ball number?","What does CDC Dr. Edwin Jenner liken the zombie virus to?",
"Barry served as best man at whose wedding?","Who accompanies Sheldon and Amy on their first dinner date?(BBT)","Who turned out to be Thea's biological father, who saved her from one of Slade's superhuman soldiers?","Barry's longtime girlfriend was Iris West. What century is she from?","'Suits' is set in a law office. Can you name it?","After they've fallen in love, Elektra gets Daredevil's alter ego a ticket to a ball. He goes, accompanied by his partner at work. What does Elektra wear?","Phoebe's brother let her name one of his triplets. What did she name her?",
"In Sherlock, Benedict Cumberbatch is Sherlock Holmes but who plays Doctor Watson?","How many dragons did Daenerys Targaryen originally have in The Game of Thrones?","What does VALAR MORGHULIS signify?","What was the name of the witch burned alive by Danerys on the funeral pyre of Khal Dargo?","In Breaking Badwhat was Walter White baby daughter's first name?","Sybil Buchanan is a character from which of these US TV series?","Margaret Schroeder is a character from which TV series","What is Monica's last name in tv series Friends?","What name is given to the seat of House Baratheon? ","Heisenberg?","An FX original, each season has a new story but some of same actors?","News program featuring real life cases?","Travel Chanel-Zak,Aaron,Billy,Jay and spirits?","Spin off from The Walking Dead?"
,"The Braverman's were the family on what drama series?","The Ghost Adventures Crew are originally from what city?","Sunday night AMC,- Rick, Daryl, Glen?","General Hospital takes place in what city?","Damon,Stefon,Elena,Bonnie and Caroline"};
MyCountDownTimer countDownTimer = new MyCountDownTimer(12000 /* 12 Sec */,
1000);
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
Toast.makeText(this," fgd",Toast.LENGTH_SHORT).show();
Intent i = getIntent();
phone = i.getStringExtra("phone");
phone1 = i.getStringExtra("phone1");
name = i.getStringExtra("name");
college = i.getStringExtra("college");
regno = i.getStringExtra("regno");
countDownTimer.start();
toolbar.setTitle("TV Series");
setSupportActionBar(toolbar);
opt1=(Button)findViewById(R.id.opt1);
count1=0;
opt2=(Button)findViewById(R.id.opt2);
opt3=(Button)findViewById(R.id.opt3);
opt4=(Button)findViewById(R.id.opt4);
time = (TextView) findViewById(R.id.time);
opt1.setOnClickListener(this);
opt2.setOnClickListener(this);
opt3.setOnClickListener(this);
opt4.setOnClickListener(this);
ques=(TextView)findViewById(R.id.ques);
quesno=(TextView)findViewById(R.id.quesno);
Toast.makeText(this," fgd",Toast.LENGTH_SHORT).show();
shuffleArray1(question, (Gamesupport2.option1), (Gamesupport2.option2), (Gamesupport2.option3), (Gamesupport2.option4));
ques.setText(question[0]);
opt1.setText(Gamesupport.option1[0]);
opt2.setText(Gamesupport.option2[0]);
opt3.setText(Gamesupport.option3[0]);
opt4.setText(Gamesupport.option4[0]);
}
#Override
public void onClick(View v) {
if(v==opt2)
{
++count;
next();
}
else
next();
}
#TargetApi(Build.VERSION_CODES.LOLLIPOP)
static void shuffleArray1(String[] q, String[] option1, String[] option2, String[] option3, String[] option4) {
// If running on Java 6 or older, use `new Random()` on RHS here
Random rnd = ThreadLocalRandom.current();
for (int i = q.length; i > 0; i--)
{
int index = rnd.nextInt(i + 1);
// Simple swap
String a = q[index];
q[index] = q[i];
q[i] = a;
String e = option1[index];
option1[index] = option1[i];
option1[i] = e;
String b = option2[index];
option2[index] = option2[i];
option2[i] = b;
String c = option3[index];
option3[index] = option3[i];
option3[i] = c;
String d = option4[index];
option4[index] = option4[i];
option4[i] = d;
}
}
private void next() {
for(i=i+1;i<=question.length;i++,j++)
{
count1++;
countDownTimer.start();
if(count1==64)
{
countDownTimer.cancel();
String str=""+count;
Intent i = new Intent(this, Score.class);
i.putExtra("phone", phone);
i.putExtra("score", str);
i.putExtra("name",name);
i.putExtra("phone1",phone1);
i.putExtra("college",college);
i.putExtra("regno", regno);
startActivity(i);
break;
}
ques.setText(question[i]);
opt1.setText(Gamesupport.option1[i]);
opt2.setText(Gamesupport.option2[i]);
opt3.setText(Gamesupport.option3[i]);
opt4.setText(Gamesupport.option4[i]);
if(count1==1||count1==2 || count1==3 || count1==4|| count1==5||count1==6||count1==7||count1==8||count1==9||count1==10||count1==11||count1==12||count1==13||count1==14||count1==15||count1==16 || count1==17 || count1==18|| count1==19||count1==20||count1==21||count1==22||count1==23||count1==24||count1==25||count1==26||count1==27||count1==28||count1==29||count1==30||count1==31||count1==32||count1==33||count1==34||count1==35||count1==36||count1==37||count1==38||count1==39||count1==40||count1==41||count1==42||count1==43||count1==44||count1==45||count1==46 || count1==47 || count1==48|| count1==49||count1==50||count1==51||count1==52||count1==53||count1==54||count1==55||count1==56||count1==57||count1==58||count1==59||count1==60 || count1==61 || count1==62||count1==63||count1==64||count1==65)
{ quesno.setText("Question No :" + (i + 1));
break;
}
}
}
}
Arrays in Java are indexed from 0 and in following loop you are counting down from 64 to 1:
for (int i = q.length; i > 0; i--)
And you are trying to access non-existent item few lines below:
q[i]
You have to change your loop to:
for (int i = q.length - 1; i >= 0; i--)
I have two arrays :
String []myExpressions = {"20+10","50+50","25+25","10+15"};
String []answers = {"30#","100#","50#","25#"};
When the user clicks the generate button it generates an expression from the array myExpressions and displays it in text-field. Then I require the user to enter the answer using the buttons provided. The answer is displayed in a EditText. When the user enters an answer they should enter a #(like a submit button) and if is the correct answer it should display correct in a text-field. So if the position in the expression array is 1, the correct answer is in the answer array in the same position. How would i check if they are in the same position?
For example: myExpressions[1] correct answer to this is answers[1].
Here is my code:
package com.gamesup.braingame;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Easy extends Activity implements OnClickListener{
EditText display;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.easy);
display = (EditText)findViewById(R.id.displayText);
display.setText("?");
final String []myExpressions = {"20+10","50+50","25+25","10+15"};
final String []answers = {"30#","100#","50#","25#"};
final TextView displayExpression = (TextView) findViewById(R.id.expression);
Button generate = (Button) findViewById(R.id.random_gen);
generate.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Random ranGenerate = new Random ();
int random = ranGenerate.nextInt(4) ;
displayExpression.setText(myExpressions[random]);
}
});
}
static boolean isEmpty = true;
public void num_Clicked(View v){
Button btn = (Button) findViewById(v.getId());
//getting the button object and using a view to get the id of the buttons
if (v.getId()== R.id.del_button){
String s = display.getText().toString();
s = s.substring(0, s.length() - 1);
display.setText(s);
return;
}
if(isEmpty){
display.setText(btn.getText());
isEmpty = false;
}
else{
display.append(btn.getText().toString());
// storing the existing number into editText and current text is set
//to current button value
//display.setText(number+btn.getText().toString());
//the total in the editText
}
if (v.getId()== R.id.hash_button){
String userAns = display.getText().toString();
}
}
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
For starters arrays in Java Begin at Index 0 so therefore , to compare the first items of the Array you should be using something like this to check if things are equal:
EditText myAnswer = (EditText) findViewById(R.id.myAnswer);
String answer = myAnswer.getText().toString();
// Notice my loop starts at 0 because the first index of an array is 0
for(int i = 0 ; i < answers.length; i++)
{
if(answers[i].equals(answer))
{
// Congratulate the User for getting it Right
}
}
It seems as though you have a little bit of a shaky logic. IMHO you should be using a multidimensional Array.
With a multidimensional Array you can essentially set up keys and values.
This is how I think your application should be configures
// This Array says , I am an array that holds arrays
String [][] multiArray = {{"4 + 5", "9"},
{"20 * 3","60"},
{"99 - 9","90"}};
// Fetch your random question, since we know our questions are the first item in out Array we can use the index [x][0] depending on the index you pull from
String question = multiArray[0][0];
// To do this randomly
Random ranGenerate = new Random ();
int random = ranGenerate.nextInt(4) ;
String question = multiArray[random][0];
// Get the Answer from yout EditText
String answer = myAnswer.getText().toString();
// Using a for loop iterate on the base index
for(int i = 0; i < multiArray.length ; i++)
{
// if the answer is in position 1 of Array [i]
if(answer.equals(mutliArray[i][1])
{
// We have found the answer, Congratulate the User
}else{
// Tell them how bad they are since they can't solve simple equations!
// ....joking obviously we would be nice and let them know its not the answer
}
}
In this line
int random = ranGenerate.nextInt(4) ;
why don't you make random an instance variable inside your class? This way you would preserve the index, and you would know which index to use to compare the answer.
This question already has answers here:
How do I compare strings in Java?
(23 answers)
Closed 9 years ago.
While comparing the content of sms with text, it's not working. Can any one please help me solve this? Here I want the count of a and b based on sms content. If sms content is a, it will give count 1. If another sms also has content a, then count must be incremented to 1 i.e., 2. Below is my code:
package com.example.sms;
import java.util.ArrayList;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;
public class Sms extends Activity {
int count=0;
int count1=0;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms);
TextView view1 = (TextView)findViewById(R.id.textview1);
TextView view2 = (TextView)findViewById(R.id.textView2);
Uri uriSMSURI = Uri.parse("content://sms/inbox");
Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,null);
String sms = "";
String data = null;
while (cur.moveToNext()) {
sms =cur.getString(12);
if(sms=="a"){
count=count+1;
view1.setText("a"+count+")");
}
else if(sms=="b"){
count1=count1+1;
view2.setText("a("+count+")");
}
else{
//view1.setText("no data");
}
//data.add(cur.getString(12));
// view1.setText(cur.getString(12));
}
//view1.setText(sms);
//setContentView(view);
}
}
The String class in Java is not a primitive type. Because of this, the == operator will not give you the results you expect- it will compare memory addresses, not the contents of the Strings.
You should use the equals() method of the String class to compare strings.
In this case, you would use:
if (sms.equals("a") {
// ...
}
Your comparison isn't working because you need to use .equals() to compare strings.
if (sms.equals("a")){
count = count + 1;
view1.setText("a" + count + ")");
}
else if (sms.equals("b")){
count1 = count1 + 1;
view2.setText("a(" + count + ")");
}
use .equals() instead of == for strings