Reputation: 98
This program gives one value of Htm for each value of i. I want to display each value in turn by repeatedly pressing the calculate button. I want it to display the values for i=0 and then when i press the button it changes to i=1 and displays the values thus calculated. I know my question is a bit vague, but your help will be really appreciated.. Regards
My main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Optimum Tilt Angle Calculator"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Calculate" />
<TextView
android:id="@+id/beta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Beta = "
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/rad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="H = "
android:textAppearance="?android:attr/textAppearanceLarge" />
My Tilt.java:
package com.ned.tilt;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Tilt extends Activity implements android.view.View.OnClickListener {
private static final double PI = 3.142;
private static final double PHI = 24.8508 * (PI / 180);
private static final double Gsc = 1367;
private static final double RO = 0.2;
int i, beta, ang;
double delta, ws, wss, Rb, Rb_num, Rb_den, Ra,
Htm, Ht;
double Hd[] = new double[12];
double Kt[] = new double[12];
double Gon[] = new double[12];
double Hom[] = new double[12];
int nbar[] = { 17, 47, 75, 105, 135, 162, 198, 228, 258, 288, 318, 344 };
int N[] = { 31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30 };
double Hm[] = { 4.38, 5.18, 5.93, 6.65, 6.67, 6.40, 5.44, 5.27, 5.62, 5.24,
4.5, 4.11 };
Button cal;
TextView radiation, angle;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initialize();
cal.setOnClickListener(this);
}
private void initialize() {
// TODO Auto-generated method stub
cal = (Button) findViewById(R.id.button1);
radiation = (TextView) findViewById(R.id.rad);
angle = (TextView) findViewById(R.id.beta);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for (i = 0; i <= 11; i++) {
Htm = 0;
delta = 23.45 * (Math.sin((0.986301369) * (PI / 180)
* (284 + (nbar[i]))));
ws = Math.acos(-(Math.tan(PHI)) * (Math.tan(delta * (PI / 180))));
ws = ws * (180 / PI);
Gon[i] = Gsc
* (1 + (0.033 * Math.cos(0.986301369 * (nbar[i])
* (PI / 180))));
Hom[i] = (86400 / PI)
* Gon[i]
* (((Math.cos(PHI)) * (Math.cos(delta * (PI / 180))) * (Math
.sin(ws * (PI / 180)))) + ((ws * (PI / 180)) * (Math
.sin(PHI) * (Math.sin(delta * (PI / 180))))));
Hom[i] = Hom[i] / 3600000;
Kt[i] = Hm[i] / Hom[i];
Hd[i] = (0.96268) - ((1.45200) * (Kt[i]))
+ ((0.27365) * (Kt[i]) * (Kt[i]))
+ ((0.04279) * (Kt[i]) * (Kt[i]) * (Kt[i]))
+ ((0.000246) * (ws))
+ ((0.001189) * (90 - (PHI * (180 / PI)) + delta));
Hd[i] = Hd[i] * Hm[i];
for (beta = 0; beta <= 90; beta++) {
wss = Math.acos(-(Math.tan((PHI) - (beta * (PI / 180))) * (Math
.tan(delta * (PI / 180)))));
wss = wss * (180 / PI);
if (wss > ws) {
wss = ws;
}
Rb_num = ((Math.cos((PHI) - (beta * (PI / 180))))
* (Math.cos(delta * (PI / 180))) * (Math.sin(wss
* (PI / 180))))
+ (((PI / 180) * wss)
* ((Math.sin((PHI) - (beta * (PI / 180))))) * ((Math
.sin(delta * (PI / 180)))));
Rb_den = ((Math.cos(PHI)) * (Math.cos(delta * (PI / 180))) * (Math
.sin(ws * (PI / 180))))
+ (((PI / 180) * (ws) * (Math.sin(PHI)) * (Math
.sin(delta * (PI / 180)))));
Rb = Rb_num / Rb_den;
Ra = ((1 - (Hd[i] / Hm[i])) * (Rb))
+ ((Hd[i] / (2 * Hm[i])) * (1 + (Math.cos(beta
* (PI / 180)))))
+ ((RO / 2) * (1 - (Math.cos(beta * (PI / 180)))));
Ht = Ra * Hm[i];
if (Ht > Htm) {
Htm = Ht;
ang = beta;
}
}
break;
}
radiation.setText("H = " + Htm);
angle.setText("Beta =" + ang);
}
}
Upvotes: 0
Views: 936
Reputation: 22040
How do you want to display them? Just tacking them on to a TextView's string?
textView.setText(someString);
A ListView of TextView's each representing a new calculation?
private List<String> mCalculations = new LinkedList<String>();
private Adapter mAdapter;
@Override
public onCreate(Bundle instance) {
mAdapter = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, mCalculations);
((ListView) findViewById(R.id.my_list_view)).setAdapter(mAdapter);
}
@Override
public void onClick(View v) {
new AsyncTask<Void, Void, Double>() {
public Double doInBackground(Void... values) {
/* perform calculation */
return value;
}
public void onPostExecute(Double... values) {
if(values.length <= 0) return;
String text = String.valueOf(values[0]);
mCalculations.add(String.valueOf(value));
mAdapter.notifyDataSetChanged();
}
}.execute();
}
Upvotes: 1
Reputation: 461
Under you onClick you start with a for loop
for (i = 0; i <= 11; i++) {
this is setting i to start at zero every time you click the button. Then at the end of your loop you use break to break out of the loop. This is making this loop useless and you do not need a loop for this part.
in your initialize function you should set i equal to zero. Then in your onClick function take out the first for loop and where you have break, take that out and replace it with i++.
Upvotes: 0
Reputation: 5619
As far as I understand from your question, you should not use your for loop
for (i = 0; i <= 11; i++)
Remove this for loop, Declare a variable, and set "i" to it, when exiting onClick increase your variable.
private int counter=0;
public void onClick(View v) {
int i=counter;
//everything continues, just remove the for loop
angle.setText("Beta =" + ang);
counter++;
if(counter==12) counter=0;//your arrays are fixed, so we are turning back
}
Upvotes: 1
Reputation: 3814
Don't use a for loop, instead create a global variable i and increase it each time you click the button
Upvotes: 0
Reputation: 86948
Simply remove your current loop, since you call break after one iteration anyways:
for (i = 0; i <= 11; i++) {
Then make i
a field variable and increment it each time you press the Button:
private int i = 0;
@Override
public void onClick(View v) {
// Do all your calculations and call setText() like above...
i++;
if(i == Hm.length) // Start over
i = 0;
}
(This assumes that every Array is equal to or larger than Hm... which is dangerous. You should perform more thorough checks.)
Upvotes: 1