renupok92
renupok92

Reputation: 98

How to display each value in turn from a for loop

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

Answers (5)

Austin Hanson
Austin Hanson

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

Travis
Travis

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

Serkan Arıkuşu
Serkan Arıkuşu

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

ElefantPhace
ElefantPhace

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

Sam
Sam

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

Related Questions