Heipä hei,
Olen tekemässä harjoitustyötä kouluun ja kyselisin vähän neuvoja ohjelmaani varten. Tehtävä olisi muuntaa käyttäjän antama lukujono kirjaimiksi. (Esim. Käyttäjä antaa 2000 ja ohjelma muuntaa ja tulostaa sen muodossa kaksi nolla nolla nolla.) Olen tähän mennessä saanut aikaan ohjelman, joka tulostaa käyttäjän antaman rivin identtisesti, mutta nyt olisi sitten tarkoitus muokata sitä edellä mainitsemallani tavalla. Osaisikohan joku auttaa?
import java.util.Scanner;
public class Harjoitus {
public static void main(String[] args)
{
boolean jatketaan = true;
Scanner sc = new Scanner(System.in);
while (jatketaan)
{
System.out.println("Anna rivi:");
String rivi = sc.nextLine() . trim();
jatketaan = (rivi != null && !rivi.equals(""));
if (jatketaan)
{
System.out.println("Kaiku vastaa: " + annaVastaus(rivi));
}
}
}
public static String annaVastaus(String s)
{
return s;
}
}Kiitoksia avusta jo etukäteen!
String-taulukon käyttö voisi auttaa tässä aika hyvin.
String[] luvut = new String[10];
Asetat vaan oikeat arvot tähän taulukkoon, niin sitten voit helposti hakea siitä numeroa vastaavan merkkijonon (esim. luvut[3] olisi "kolme").
Toinen mahdollinen, joskin mielestäni epäkäytännöllisempi, tapa olisi switch-case-rakenteen käyttäminen:
switch (numero) {
case 0:
return "nolla";
case 1:
return "yksi";
//jne...
}ei liity tähän mitenkään mutta aika hauska metodi tuo annaVastaus() :S
jassi kirjoitti:
ei liity tähän mitenkään mutta aika hauska metodi tuo annaVastaus() :S
annaVastaus()-metodi on hyvä esimerkki siitä, mitä modulaarinen ohjelmointi pohjimmiltaan on. Jokaisesta, hyvin yksinkertaisestakin toiminnosta tehdään metodi.
Tuohon aloitusviestiin vielä. Tehtävänannon lähdekoodi on täsmälleen samanlainen kuin omassa harjoitustyössäni, joka oli muuten sisällöltään aivan erilainen. En tiedä missä koulussa olet, tai mihin teet tuota harjoitustyötä mutta ohjeissahan luki että koodin on oltava täysin omaa ja ratkaisusta saa keskustella kavereiden kanssa vain periaattellisella tasolla. Eli toisin sanoen, nettifoorumilta pyydetty apu jossa vastataan näyttämällä lähdekoodia on sääntörike, joka saattaa aiheuttaa harjoitustyön hylkäämisen ja kenties koko kurssin hylkäyksen.
Vaikuttaa tuo ensimmäinen koodinpätkä jotenkin tutulta...Taidat olla Turun avoimen yo:n ohjelmointikursseilla ;D
Tuo sama koodinpätkä on käytössä on myös tietojenkäsittelytieteen koulutusohjelman Rakenteinen ohjelmointi -kurssin harkassa.
Joku hauska opas, jossa neuvotaan, että mitä pitää ladata, mitä asentaa, miten asennetaan jne... voisi olla hyvä. Ohjelmointiputkasta ei tunnu löytyvän vielä mitään java opasta.
Itsellä alkoi koulussa juuri java-ohjelmointi ja olisi mukava päästä kotonakin vähän tekemään, mutta se ei oikein onnistu, kun ei tiedä, että mitä pitäisi asentaa, että java-ohjelmia voisi kääntää samalla tavalla kuin koulussakin "javac ohjelma.java", "java ohjelma.class" jne...
Eipä siihen muuta tarvi kuin JDK:n, löytyy jostainpäin java.sun.comia.
Minä yritin asentaa sieltä etusivulta löytyvän linkin takaa tuon: http://java.sun.com/j2ee/1.4/download.html
Mutta se asenti vain jonkun ihme serverin eikä sitten kuitenkaan ollut mitään keinoa kääntää java-ohjelmia suoritettaviksi.
juhaz kirjoitti:
Minä yritin asentaa sieltä etusivulta löytyvän linkin takaa tuon: http://java.sun.com/j2ee/1.4/download.html
Mutta se asenti vain jonkun ihme serverin eikä sitten kuitenkaan ollut mitään keinoa kääntää java-ohjelmia suoritettaviksi.
Taitaa olla yleensäkin helpompaa ladata se Netbeans + JDK-paketti: http://java.sun.com/j2se/1.5.0/download.jsp
Miten javassa voi tyhjentää komentokehoiteen ja kuinka javassa saa vaikka esimerkiksi jonkun 10 sekuntin pituisen tauon ennenkuin se jatkaa ohjelman toimintaa? Tai kuinka ohjelman saa suorittamaan samassa ikkunassa jonkun komennon?
Taukoja saa tehtyä Thread.sleep(long aikamillisekunteina); ja komentojen suorittamisen pitäisi onnistua System.getRuntime().exec("komento");
Lisää tietoa http://java.sun.com/j2se/1.5.0/docs/api/java/
Sami kirjoitti:
Taukoja saa tehtyä Thread.sleep(long aikamillisekunteina); ja komentojen suorittamisen pitäisi onnistua System.getRuntime().exec("komento");
Lisää tietoa http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html ja http://java.sun.com/j2se/1.5.0/docs/api/java/ lang/Thread.html
Öö.. voitko neuvoa vähän tarkemmin? Itse koitin säätää tuota exec("komento") hommelia, mutta se ei toiminut. Tarvitsisiko siinä olla joku import.java.jokin.*; alussa ja/vai miten sitä siis käytetään oikeaoppisesti?
Itse asiassa cls-komennon kutsuminen tyyliin
Runtime.getRuntime().exec("cls");ei tuota haluttua tulosta. Ensisijainen syy on se, että cls on windowsin komentotulkin osa eikä erillinen käynnistettävä ohjelma. Toiseksi, tuolla tavalla käynnistetty ohjelma luo erillisen komentokehotteen eikä vaikuta siihen ikkunaan, josta käynnistit java-ohjelman.
Yhteensopivin ratkaisu tähän ongelmaan on tulostaa joukko rivinvaihtoja, jolloin teksti katoaa ruudusta.
Ainoa toimiva ratkaisu on tehdä ruudun tyhjennys-metodi C:llä ja sitten kutsua sitä natiivisti java-ohjelman sisältä.
Esim.
***CLS.java
public class CLS {
native static void cls();
static {
System.loadLibrary("clslib");
}
public static void main(String[] args) {
System.out.print("Ei toimi.....");
cls();
System.out.println("Hello World");
}
}javac CLS.java javah -jni CLS # -> CLS.h
***cls.c
#include "CLS.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_CLS_cls(JNIEnv * a, jclass b) {
system("cls");
}cl -IC:\j2sdk1.4.2_05\include -IC:\j2sdk1.4.2_05\include\win32 -LD cls.c -Feclslib.dll
Aihe on jo aika vanha, joten et voi enää vastata siihen.