Miten vois laittaa uuden luvun, jos tilanne olisi tämmöinen:
Int i = 1;
If (jotain jotain)
{ //tähän tarvis koodin pätkän, joka lisäisi vaikka 1 tilalle 4:sen //paikalle
}
Tätä olen jonkunaikaa pähkäillyt...
Int i = 1;
If (jotain jotain)
{ //tähän tarvis koodin pätkän, joka lisäisi vaikka 1 tilalle 4:sen //paikalle
}
Tätä olen jonkunaikaa pähkäillyt...
Vastaukset 8
Vanhimmat
Olet siis päässyt java-kurssille ja maanantaina pitäis palauttaa ensimmäiset harjoitustyöt, mutta et jaksanut tehdä mitään yhtään aiemmin?
Mietihän mitä teet tällä rivillä;
Int i = 1;
Yrität luoda kokonaislukumuuttujaa, jonka nimi on i (vaihda Int:n tilalle int) ja jolle annat arvoksi 1. Mitenköhän ihmeessä ykkösen tilalle voisi laittaa neljän? Jos vaikka koittaisit laittaa ykkösen tilalle nelosen...
En opiskele javaa koulussa, iha itsenäisesti opiskelen.
Selitin vähän huonosti. Tarkoitus on tehdä semmonen ohjelma, joka arpoo luvun ja se pitäisi arvata. Muuten on valmis, mutta pitäisi se luku jotenkin saada uudelleen arvottua...
JOs vaikka arvotaan joku luku, ja ollaan jo 5 kertaa arvattu, niin pitäisi jotain nappia painamalla saada ohjelman arpomaan uuden luvun.
Ja kyllä tiesin, että pitää laittaa int eikä Int.
Pieni kirjoitusvirhe täällä :)
googlesta
http://www.rgagnon.com/javadetails/java-0419.html
Kysymys kuuluukin: Miten sijoitan:
Random rand = new Random();
final int i = rand.nextInt(1 20);
arpoouudestaan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//tähän pitäisi saada pätkä, joka laittaisi
//"i":n tilalle jonkun toisen luvun. esim.
//Random rand = new Random();
// final int k = rand.nextInt(1 20);
//Tähän pitäisi saada koodinpätkä, joka muuttaisi
// luvun "i" "k":ksi
// esim. Kun on String kyseessä, niin voidaan laittaa
// jotain.setText(jokuteksti);
}
});
Eli tämä oli se ongelma...
meni PIKKASEN ohi, mut jos haluat muuttaa muuttujan arvoa niin poista ihmeessä tuo "final" tuolta.
int i = rand.nextInt(1 20);
int k = rand.nextInt(1 20);
i = k;
Ainiin joo... Hups.
Mut jos poistaa Final:in edestä, ohjelma ei enää toimi.
Kuva:
http://img45.imageshack.us/my.php?image=kuva1pu9.png
Tässä on ohjelman koodi (final:ia ei ole lisätty):
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class arpoja extends JFrame {
public arpoja() {
super("arpoja");
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setSize(350, 350);
//komponentit
JButton vastaa = new JButton("yritä vastata");
JButton arpoouudestaan = new JButton("uusi numero");
final JLabel vastaus = new JLabel();
JPanel panel = new JPanel();
JMenuBar bar = new JMenuBar();
JMenu ohjelma = new JMenu("Ohjelma");
JMenuItem sulje = new JMenuItem("Sulje");
JButton apu = new JButton("numero");
panel.add(apu);
Random rand = new Random();
int i = rand.nextInt(1 20);
arpoouudestaan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//tällä hetkellä tarpeeton. Älä huomauta
}
});
System.out.println(i);
//komponenttien lisäys
panel.add(arpoouudestaan);
bar.add(ohjelma);
ohjelma.add(sulje);
panel.add(vastaa);
panel.add(vastaus);
this.add(panel);
this.setJMenuBar(bar);
// kuuntelijat
vastaa.addActionListener(new ActionListener() {
int painettu = 0;
public void actionPerformed(ActionEvent e) {
String teksti = JOptionPane.showInputDialog(null,"Veikkaa luku 1-20 väliltä");
int j = Integer.parseInt(teksti);
if (j == i) {
vastaus.setText("arvasit oikein! luku siis oli " i );
}
else {
vastaus.setText("Väärin!");
}
if ( painettu == 5) {
if (j == i) {
JOptionPane.showMessageDialog(null,"arvasit oikein!");
}
else { JOptionPane.showMessageDialog(null,"Et arvannut! luku oli " i "Paina: uusi numero");
}
}
}
});
sulje.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
apu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
setVisible(true);
}
public static void main(String[] agrs) {
new arpoja();
}
}
joo, siis määrittele tuo i-muuttuja luokan sisällä äläkä tuon alustajan.
eli jotenkin näin :
public class arpoja extends JFrame {
private Random rand = new Random();
private int i = rand.nextInt(1 20);
public arpoja() {
...
tuossahan vaaditaan finalia ihan siksi kun tuo tapahtumankäsittelijä mikä on esitelty lokaalisti on periaatteessa täysin riippumaton tuosta alustajasta joten se ei voi tietää millon i:n arvo muuttuu ja täten se vaatii sen määrittelyä vakioarvoksi. kun esittelet i:n luokan sisällä tätä ongelmaa ei ole.
ps. miksi "int i = rand.nextInt(1 20); " eikö ois lyhyempää vain "int i = rand.nextInt(21) ? " ;)
Nyt lähti ohjelma rullaamaan! Kiitoksia paljon vastanneille ja etenkin sinulle, joka ratkasi ongelmani :))))
"ps. miksi "int i = rand.nextInt(1 20); " eikö ois lyhyempää vain "int i = rand.nextInt(21) ? " ;)"
hm... mä oon aina luullu et tossa otetaan numero 1 ja 20 väliltä??
Ainakin jossain (en muista missä) ohjeessa, missä käsiteltiin tätä asiaa, niin mainittiin, että kun merkitään "1 20" niin arvotaan luku 1 ja 20 väliltä. :D:D
Noh... aina ei kantsia uskoa kaikkeen mitä netissä lukee :PPP