Helppo Java ohjelmointikysymys?

  • Keskustelun aloittaja Keskustelun aloittaja kgb
  • Aloitettu Aloitettu

kgb

Liittynyt
1.4.2003
Viestejä
434
Yrittänyt tässä muutaman päivän etsiä tietoa, miten javassa luetaan tieto muistiin.

Eli

Ohjelma alkaa

String nimi;

System.out.println("anna nimesi?");
Mitä tähän pitää laitaa jotta kääntäjä lukee vastauksen muistiin?:david:


Ohjelma loppuu

Koulussa toi oli toteutettu itse tehdyllä luokalla, mutta kai siihen on joku suora komento kuten C++ scanf vai mikä siinä olikin.
 
10% ALENNUS KOODILLA PAKKOTOISTO
kgb sanoi:
Yrittänyt tässä muutaman päivän etsiä tietoa, miten javassa luetaan tieto muistiin.

Eli

Ohjelma alkaa

String nimi;

System.out.println("anna nimesi?");
Mitä tähän pitää laitaa jotta kääntäjä lukee vastauksen muistiin?:david:

System.in -olio on InputStream -tyyppinen ja sillä on metodeita, joilla voit lukea näppäimistön syötteen sisään. Tämä on vähän rumaa koodia, mutta näinkin voi tehdä:

String s = "";
char c = 0;
while (c != '\n') {
try {
c = (char)System.in.read();
} catch (Exception e) {}
s += c;
}

Tuo nyt lukee sen rivinvaihdonkin mukaan merkkijonoon, joten voit trimmata vähän.

Näköjään keskustelupalsta poistaa sisennykset.
 
Feikki sanoi:
System.in -olio on InputStream -tyyppinen ja sillä on metodeita, joilla voit lukea näppäimistön syötteen sisään. Tämä on vähän rumaa koodia, mutta näinkin voi tehdä:

String s = "";
char c = 0;
while (c != '\n') {
try {
c = (char)System.in.read();
} catch (Exception e) {}
s += c;
}

Eli ei ole olemassa mitään suoraan komentoa, tyyliin read.string() tai vastaavaa, vaan täytyy aina olla joku josta kutsua komentoa. Ei siis ole sisään rakennettua "luku ominaisuutta".

mulla on kyllä valmiiksi tehty luokka tyyliin oma.lueint, string jne.
 
Onnistuu helposti näin:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

nimi = reader.readLine();
 
Onnistuu myös Scanner-luokalla:

String nimi;
Scanner nappaimisto;
nappaimisto = new Scanner (System.in);

System.out.println("anna nimesi");
nimi = nappaimisto.next.String();


Ohjelman alkuun täytyy laittaa importti että saadaan Scanner käyttöön, tyyliin

import java.util.Scanner();


Edellyttää myös että Javasi ei ole liian vanha...
 
Keila sanoi:
Onnistuu myös Scanner-luokalla:

String nimi;
Scanner nappaimisto;
nappaimisto = new Scanner (System.in);

System.out.println("anna nimesi");
nimi = nappaimisto.next.String();


Ohjelman alkuun täytyy laittaa importti että saadaan Scanner käyttöön, tyyliin

import java.util.Scanner();

Mitäköhän paskaa sitä on tullut kiireessä kirjoiteltua... :nolo:

Korjataan nyt vielä toimivampi malli vaikka ketään tuskin enää kiinnostaa:

import java.util.Scanner;
...

String nimi;

Scanner nappaimisto;
nappaimisto = new Scanner(System.in);

System.out.println("anna nimesi");
nimi = nappaimisto.nextLine();
 
Pitipä katsoa Scannerin JavaDocit kun en edes tiennyt sen olemassaolosta (näköjään uusi 1.5:ssa). Just tuollaiseen "Anna nimesi", "Syötä ikäsi"-tyyliseen käyttöön se on kyllä käytännöllisin vaihtoehto. Toimii kun StringTokenizer streameille ja sisältää valmiit konversiot numeroiksi. Joku nextDate(DateFormat format) siinä saisi vielä olla.
 
Hitto, täytyy oikein kokeilla jos mullekin löytyis apua täältä.

Tarvisin siis sellaisen palautelomake-hässäkän, johon syötetään nimi, puhelinnumero, s-postiosoite ja sitten palaute.

Kun klikataan "LÄHETÄ" niin yllämainitut tiedot lähtevät ennalta määrättyihin sähköpostiosoitteisiin. LÄHETÄ-napin vieressä olisi TYHJENNÄ-nappi josta lomakkeet tyhjenisivät.

TYYLIIN TÄMÄ: http://gamma.nic.fi/~otammile/palautelom.htm

Osaisiko kukaan auttaa?
 
Hitto, täytyy oikein kokeilla jos mullekin löytyis apua täältä.

Tarvisin siis sellaisen palautelomake-hässäkän, johon syötetään nimi, puhelinnumero, s-postiosoite ja sitten palaute.

Kun klikataan "LÄHETÄ" niin yllämainitut tiedot lähtevät ennalta määrättyihin sähköpostiosoitteisiin. LÄHETÄ-napin vieressä olisi TYHJENNÄ-nappi josta lomakkeet tyhjenisivät.

TYYLIIN TÄMÄ: http://gamma.nic.fi/~otammile/palautelom.htm

Osaisiko kukaan auttaa?

Kannattaisi tehdä varmaan yksi servletti jota kutsut tuolta html sivulta.
Sevletin requestissä otat lomakkeen kentistä tiedot ja lähetät ne maililla niihin osoitteisiin. Responseen tuo lomake, tai teet siitä suoraan JSP-sivun.

Lomakkeen tyhjentäminen käy varmaan yksinkertaisimmin lataamalla java scriptillä tuo sivu uudestaan. onClick.window.location='lomake.html' tjsp.
 
Tässä on vaan se vikana, etten ole koskaan käyttänyt javaa...
 
Tässä on vaan se vikana, etten ole koskaan käyttänyt javaa...

Ai :D onko tuo joku koulun harjoitustyö tai vastaava, tai pitäisikö se saada oikeasti jonnekkin toimimaan. Siis koko ympäristö toimimaan vaan pelkkä lähdekoodi?
 
Jotain tuonne päin, ei nyt kuitenkaan varmaan ihan suoraan toimi. En tiedä onko tuo mail-kirjasto minkälainen nykyään.

import java.io.*;
import java.net.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;

public class SendMailServlet extends HttpServlet {

private String kenttä1;
private String kenttä2;
private String kenttä3;
//jne.

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");

this.kenttä1 = request.getParameter("nimi");
this.kenttä2 = request.getParameter("puh");
this.kenttä3 = request.getParameter("palaute");
//jne.

Properties p = new Properties();
p.put("mail.smtp.host", "mailserver.com");
Session s = Session.getInstance(p,null);

InternetAddress from = new InternetAddress("mail@mail.com");
InternetAddress to = new InternetAddress("recepeint@server.com");

MimeMessage message = new MimeMessage(s);
message.setFrom(from);
message.addRecipient(Message.RecipientType.TO, to);

message.setSubject("Palautetta, lähetti: " + this.kenttä1);
message.setText(this.kenttä3);

Transport.send(message);
response.sendRedirect((String) "lomake.html");
}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

public String getServletInfo() {
return "Short description";
}

}
 
Pitäis saada ihan oikeasti toimimaan.
 
yleensä weppipalvelimilta löytyy valmiita skriptejä joiden avulla toi onnistuu. Jos ei, niin sitten pitää jotain kikkailla. Mee vaikka palveluntarjoajan sivuille katsomaan jos sieltä löytyisi jotain supporttia koskien palautelomakkeita.
 
Apuja?

Saisinko apuja täältä harjoitustyön tekoon? Olen tehnyt kaksi luokkaa (menevät käännöksestä läpi, paitsi että toinen antaa jonkin herjan käännöksessä) mutta kun teen testiluokkaa jossa pitäisi käyttää noita kahden luokan koodeja, niin se ei luonnistu ja nyt olen ihan hukassa. Ja noita luokkien dokumentointeja en myös oikein tajua että miten ne tehdään. En laita tänne noita luokkia mutta jos joku haluaisi auttaa niin voisin pistää ne privana.
Ja voin myöntää, en ole mikään koodari eikä musta koskaan sellaista tulekkaan mutta kun työ on tehtävä ja en sitä itse osaa näköjään tehdä niin siksi kyselen apuja.
 
Mikä vikana kun heittää ajon aikana tämmösen herjan:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 48
at java.lang.String.charAt(Unknown Source)
at Harjoitustyo1.main(Harjoitustyo1.java:33)


oon ensin määritelly muuttujan char muuttuja=' ';
kysyn jotain käyttäjältä
sitten tähän jökittää: muuttuja=lukija.nextLine().charAt(0);
 
StringIndexOutOfBounds tarkoittaa kyllä sitä että merkkiä yritetään poimia merkkijonon rajojen ulkopuolelta eli esim. indeksistä joka on isompi kuin merkkijonon viimeinen indeksi (pituus - 1). Merkkijonossa on aina jotain esim. välilyönti tms. ei siellä ole kohtaa missä ei olisi mitään.

Tikkuniska: Oletko sen sijaan varma että kyseinen poikkeus tulee juuri tuolta riviltä koodissa? Tuo poikkeus viittaisi siihen että yrität poimia merkkiä indeksistä 48 ja merkkijonon koko on pienempi. Tuo postaamasi rivi ei kuitenkaan näytä sellaista tekevän. Lisäksi hyvää käytäntöä olisi poimia tuo nextLine() palauttama merkkijono talteen omaan muuttujaan ja tarkastaa että se ei ole null ja on ylipäätään pidempi kuin 0, ennen kuin yrität poimia sieltä yksittäistä merkkiä.
 
Itse aloin tutkimaan Javaa omaksi ilokseni. Olen nyt tehnyt muutamia yksinkertaisia harjoituksia, joita olen netistä löytänyt. Lähinnä tutkimalla, mitä niissä koodeissa tapahtuu ja mistä ne koostuvat. Sitten muuttamalla tiettyjä kohtia ja kokeilemalla taas.

Nyt tuli kuitenkin jotain outoa vastaan. Yritin saada tätä pätkää toimimaan. Eli:

String syottoRivi;
int kokonaisLuku;
double liukuLuku;

System.out.println("Mikä on nimesi?");
syottoRivi = Lue.rivi();
System.out.println("Mitä kokonaislukua ajattelet?");
kokonaisLuku = Lue.kluku();
System.out.println("Mitä reaalilukua ajattelet?");
liukuLuku = Lue.dluku();

System.out.print ("Tiedän, että nimesi on "+syottoRivi);
System.out.println(" ja että ajattelit lukuja "+
kokonaisLuku+" ja "+liukuLuku+".");
System.out.println("Enkö olekin viisas!");


Miksi tuossa on suomeksi nuo "Lue.rivi" yms.? Eihän ohjelma niitä ymmärrä?
 

Latest posts

Suositut

Back
Ylös Bottom