En saa jostakin ihmeen syystä tällä koodilla ohjelmaa kirjoittamaan ulkoiseen tiedostoon. osaako joku auttaa? Muuten ohjelma toimii niin kuin pitää.
package javaapplication1; import java.util.*; import java.io.*; public class JavaApplication1 { private static Scanner lukija = new Scanner(System.in); public static void main(String[] args) throws Exception { //Luo arraylistin ArrayList<String> vastaa = new ArrayList<String>(); ArrayList<String> kysyy = new ArrayList<String>(); // hakee tiedostoa File tulos_2 = new File("vastaukset.txt"); // ei löydy if (!tulos_2.exists()) { // luodaan PrintWriter tulos = new PrintWriter("vastaukset.txt"); } else { } File tulos_3 = new File("kysymykset.txt"); if (!tulos_3.exists()) { // luodaan PrintWriter tulos = new PrintWriter("kysymykset.txt"); } else { } // muulloin tarkastellaan Scanner syottotiedosto = new Scanner(new File("vastaukset.txt")); Scanner syottotiedosto2 = new Scanner(new File("kysymykset.txt")); //lisätään arraylist:iin while(syottotiedosto.hasNextLine()) { String rivi = syottotiedosto.nextLine(); vastaa.add(rivi); } while(syottotiedosto2.hasNextLine()) { String rivi = syottotiedosto2.nextLine(); kysyy.add(rivi); } FileWriter kirjoittaja1 = new FileWriter("kysymykset.txt"); FileWriter kirjoittaja2 = new FileWriter("vastaukset.txt"); //aloitetaan suorittamaan itse-ohjelmaa System.out.println("Aloitetaanko?"); System.out.println("Kun lopetat sano: sammuta"); while(true) { System.out.print("Kysymys: "); String i = lukija.nextLine(); System.out.println(""); int syote_pituus = i.length(); syote_pituus -= 1; char vika_kirjain = i.charAt(syote_pituus); // yllä selvitetään syötteen viimeinen kirjain String moi = "?"; char t = moi.charAt(0); // katsotaan onko syöte kysymys boolean test = vika_kirjain == t; if(i.equals("moi")) { System.out.println("moi."); } else if(i.equals("hei")) { System.out.println("hei"); } else if(i.equals("Moi")) { System.out.println("moi."); } else if(i.equals("Hei")) { System.out.println("hei."); } else if(i.equals("moi.")) { System.out.println("moi."); } else if(i.equals("hei.")) { System.out.println("hei"); } else if(i.equals("Moi.")) { System.out.println("moi."); } else if(i.equals("Hei.")) { System.out.println("hei."); } else if(test) { // Jos oli kysymys niin tämä suoritetaan // System.out.println("kysyit"); //selvittää sisälsikö syöte listalta jotakin if(kysyy.contains(i)) { //selvitetään listalla sijaintia int paikka = 0; while(true) { String selvitys = kysyy.get(paikka); if(selvitys.equals(i)) { break; } else { paikka += 1; } } String mita_vastataan = vastaa.get(paikka); System.out.println(mita_vastataan); } else { kysyy.add(i); System.out.println(i); String w = lukija.nextLine(); System.out.println(""); vastaa.add(w); } } else if(i.equals("sammuta")) { // tämä suoritetaan jos käyttäjä haluaa sammutaa ohjelman break; } else { // muulloin suoritetaan tämä // System.out.println("Sanoit"); //arpoo kysymyksen jonka sitten kysyy Random arpoja = new Random(); int listan_koko = kysyy.size(); int kysymyksen_luku = arpoja.nextInt(listan_koko); System.out.println(kysyy.get(kysymyksen_luku)); String turha = lukija.nextLine(); System.out.println(""); } } //arraylistin synkronointi tiedostoon int listan_koko = kysyy.size(); int kierros_lasku = 0; String kyssarit = ""; while(kierros_lasku == listan_koko){ String sanaa = kysyy.get(kierros_lasku); String vaihto = "\n"; kyssarit = kyssarit + vaihto + sanaa; kierros_lasku += 1; } int listan_koko2 = vastaa.size(); int kierros_lasku2 = 0; String vastaukset = ""; while(kierros_lasku2 == listan_koko2){ String sanaa2 = vastaa.get(kierros_lasku2); String vaihto = "\n"; vastaukset = vastaukset + vaihto + sanaa2; kierros_lasku2 += 1; } kirjoittaja1.write(kyssarit); kirjoittaja2.write(vastaukset); syottotiedosto.close(); syottotiedosto2.close(); kirjoittaja1.close(); kirjoittaja2.close(); } public static int selvittaa_kirjaimen (String sana, String haluttu) { int pituus = sana.length(); int paikka_numero = 0; int paljonko_kiertanyt = 0; char h = haluttu.charAt(0); while(true) { char v = sana.charAt(paikka_numero); if(h == v) { break; } else { paikka_numero += 1; } } return paikka_numero; } }
Lisäämällä tämän...
System.out.println(""); System.out.print("Kyssarit="); System.out.println(kyssarit); System.out.print("Vastaukset="); System.out.println(vastaukset);
Tänne:
... while(kierros_lasku2 == listan_koko2){ String sanaa2 = vastaa.get(kierros_lasku2); String vaihto = "\n"; vastaukset = vastaukset + vaihto + sanaa2; kierros_lasku2 += 1; } System.out.println(""); System.out.print("Kyssarit="); System.out.println(kyssarit); System.out.print("Vastaukset="); System.out.println(vastaukset); kirjoittaja1.write(kyssarit); kirjoittaja2.write(vastaukset); ...
Huomannet, ettei kyssarit ja vastaukset sisällä mitään tietoa, jota kirjoittaa.
(Mikäli olen ymmärtänyt koodisi oikein.)
Siis ohjelma tekee tyhjät tiedostot.
ei ihan toiminut, mutta itse päivällä muuntelin koodia. Ja mikäli ymmärsin oikein niin se kopioidessa ulkoisesta tiedostosta niin se tyhjentää ulkoiset tiedostot. niin osaako joku sanoa mikä on mulla väärin siinä kohtaa?
package chat_bot; import java.io.*; import java.util.*; public class Chat_bot { private static Scanner lukija = new Scanner(System.in); /** * @param args the command line arguments */ public static void main(String[] args) { try { BufferedWriter out = new BufferedWriter(new FileWriter("kysymykset.txt", true)); BufferedWriter out2 = new BufferedWriter(new FileWriter("vastaukset.txt", true)); ArrayList<String> vastaa = new ArrayList<String>(); ArrayList<String> kysyy = new ArrayList<String>(); // hakee tiedostoa File tulos_2 = new File("vastaukset.txt"); // ei löydy if (!tulos_2.exists()) { // luodaan PrintWriter tulos = new PrintWriter("vastaukset.txt"); } else { } File tulos_3 = new File("kysymykset.txt"); if (!tulos_3.exists()) { // luodaan PrintWriter tulos = new PrintWriter("kysymykset.txt"); } else { } // muulloin tarkastellaan Scanner syottotiedosto = new Scanner(new File("vastaukset.txt")); Scanner syottotiedosto2 = new Scanner(new File("kysymykset.txt")); //lisätään arraylist:iin while(syottotiedosto.hasNextLine()) { String rivi = syottotiedosto.nextLine(); vastaa.add(rivi); } while(syottotiedosto2.hasNextLine()) { String rivi = syottotiedosto2.nextLine(); kysyy.add(rivi); } int n = kysyy.size(); if(n>0){ int q = 0; String moikka = ""; while(q == n){ String wq = kysyy.get(q); wq = wq + "\n"; moikka = moikka + wq; q += 1; } out.write(moikka); } else { } int x = vastaa.size(); if(x>0){ int z = 0; String moro = ""; while(z == x){ String re = vastaa.get(z); re = re + "\n"; moro = moro + re; z += 1; } out2.write(moro); } else{ } PrintWriter kirjoittaja1 = new PrintWriter("kysymykset.txt"); PrintWriter kirjoittaja2 = new PrintWriter("vastaukset.txt"); //aloitetaan suorittamaan itse-ohjelmaa System.out.println("Aloitetaanko?"); System.out.println("Kun lopetat sano: sammuta"); while(true) { System.out.print("Kysymys: "); String i = lukija.nextLine(); System.out.println(""); int syote_pituus = i.length(); syote_pituus -= 1; char vika_kirjain = i.charAt(syote_pituus); // yllä selvitetään syötteen viimeinen kirjain String moi = "?"; char t = moi.charAt(0); // katsotaan onko syöte kysymys boolean test = vika_kirjain == t; if(i.equals("moi")) { System.out.println("moi."); } else if(i.equals("hei")) { System.out.println("hei"); } else if(i.equals("Moi")) { System.out.println("moi."); } else if(i.equals("Hei")) { System.out.println("hei."); } else if(i.equals("moi.")) { System.out.println("moi."); } else if(i.equals("hei.")) { System.out.println("hei"); } else if(i.equals("Moi.")) { System.out.println("moi."); } else if(i.equals("Hei.")) { System.out.println("hei."); } else if(test) { // Jos oli kysymys niin tämä suoritetaan // System.out.println("kysyit"); //selvittää sisälsikö syöte listalta jotakin if(kysyy.contains(i)) { //selvitetään listalla sijaintia int paikka = 0; while(true) { String selvitys = kysyy.get(paikka); if(selvitys.equals(i)) { break; } else { paikka += 1; } } String mita_vastataan = vastaa.get(paikka); System.out.println(mita_vastataan); } else { kysyy.add(i); out.write(i); System.out.println(i); String w = lukija.nextLine(); System.out.println(""); vastaa.add(w); out2.write(w); } } else if(i.equals("sammuta")) { // tämä suoritetaan jos käyttäjä haluaa sammutaa ohjelman break; } else { // muulloin suoritetaan tämä // System.out.println("Sanoit"); //arpoo kysymyksen jonka sitten kysyy Random arpoja = new Random(); int listan_koko = kysyy.size(); int kysymyksen_luku = arpoja.nextInt(listan_koko); System.out.println(kysyy.get(kysymyksen_luku)); String turha = lukija.nextLine(); System.out.println(""); } } //arraylistin synkronointi tiedostoon // kirjoittaja1.write(kyssarit); // kirjoittaja2.write(vastaukset); syottotiedosto.close(); syottotiedosto2.close(); out.close(); out2.close(); } catch (IOException e) { } } public static String tulosta (){ System.out.println("Kysymys:"); String sana =lukija.nextLine(); return sana; } public static String tulosta2 (){ System.out.println("Vastaus:"); String sana =lukija.nextLine(); return sana; } }
package javaapplication1; import java.util.*; import java.io.*; public class JavaApplication1 { private static Scanner lukija = new Scanner(System.in); public static void main(String[] args) throws Exception { //Luo arraylistin ArrayList<String> vastaa = new ArrayList<String>(); ArrayList<String> kysyy = new ArrayList<String>(); // hakee tiedostoa File tulos_2 = new File("vastaukset.txt"); // ei löydy if (!tulos_2.exists()) { // luodaan PrintWriter tulos = new PrintWriter("vastaukset.txt"); } else { } File tulos_3 = new File("kysymykset.txt"); if (!tulos_3.exists()) { // luodaan PrintWriter tulos = new PrintWriter("kysymykset.txt"); } else { } // muulloin tarkastellaan Scanner syottotiedosto = new Scanner(new File("vastaukset.txt")); Scanner syottotiedosto2 = new Scanner(new File("kysymykset.txt")); //lisätään arraylist:iin while(syottotiedosto.hasNextLine()) { String rivi = syottotiedosto.nextLine(); vastaa.add(rivi); } while(syottotiedosto2.hasNextLine()) { String rivi = syottotiedosto2.nextLine(); kysyy.add(rivi); } FileWriter kirjoittaja1 = new FileWriter("kysymykset.txt"); FileWriter kirjoittaja2 = new FileWriter("vastaukset.txt"); //aloitetaan suorittamaan itse-ohjelmaa System.out.println("Aloitetaanko?"); System.out.println("Kun lopetat sano: sammuta"); while(true) { System.out.print("Kysymys: "); String i = lukija.nextLine(); System.out.println(""); int syote_pituus = i.length(); syote_pituus -= 1; char vika_kirjain = i.charAt(syote_pituus); // yllä selvitetään syötteen viimeinen kirjain String moi = "?"; char t = moi.charAt(0); // katsotaan onko syöte kysymys boolean test = vika_kirjain == t; if(i.equals("moi")) { System.out.println("moi."); } else if(i.equals("hei")) { System.out.println("hei"); } else if(i.equals("Moi")) { System.out.println("moi."); } else if(i.equals("Hei")) { System.out.println("hei."); } else if(i.equals("moi.")) { System.out.println("moi."); } else if(i.equals("hei.")) { System.out.println("hei"); } else if(i.equals("Moi.")) { System.out.println("moi."); } else if(i.equals("Hei.")) { System.out.println("hei."); } else if(test) { // Jos oli kysymys niin tämä suoritetaan // System.out.println("kysyit"); //selvittää sisälsikö syöte listalta jotakin if(kysyy.contains(i)) { //selvitetään listalla sijaintia int paikka = 0; while(true) { String selvitys = kysyy.get(paikka); if(selvitys.equals(i)) { break; } else { paikka += 1; } } String mita_vastataan = vastaa.get(paikka); System.out.println(mita_vastataan); } else { kysyy.add(i); System.out.println(i); String w = lukija.nextLine(); System.out.println(""); vastaa.add(w); } } else if(i.equals("sammuta")) { // tämä suoritetaan jos käyttäjä haluaa sammutaa ohjelman break; } else { // muulloin suoritetaan tämä // System.out.println("Sanoit"); //arpoo kysymyksen jonka sitten kysyy Random arpoja = new Random(); int listan_koko = kysyy.size(); int kysymyksen_luku = arpoja.nextInt(listan_koko); System.out.println(kysyy.get(kysymyksen_luku)); String turha = lukija.nextLine(); System.out.println(""); } } //arraylistin synkronointi tiedostoon int listan_koko = kysyy.size(); int kierros_lasku = 0; System.out.println("listan_koko="+listan_koko); String kyssarit = ""; while(kierros_lasku < listan_koko){ String sanaa = kysyy.get(kierros_lasku); String vaihto = "\n"; System.out.println("sanaa="+sanaa); kyssarit = kyssarit + vaihto + sanaa; kierros_lasku += 1; } int listan_koko2 = vastaa.size(); int kierros_lasku2 = 0; String vastaukset = ""; while(kierros_lasku2 < listan_koko2){ String sanaa2 = vastaa.get(kierros_lasku2); String vaihto = "\n"; vastaukset = vastaukset + vaihto + sanaa2; kierros_lasku2 += 1; } System.out.println(""); System.out.print("Kyssarit="); System.out.println(kyssarit); System.out.print("Vastaukset="); System.out.println(vastaukset); kirjoittaja1.write(kyssarit); kirjoittaja2.write(vastaukset); syottotiedosto.close(); syottotiedosto2.close(); kirjoittaja1.close(); kirjoittaja2.close(); } public static int selvittaa_kirjaimen (String sana, String haluttu) { int pituus = sana.length(); int paikka_numero = 0; int paljonko_kiertanyt = 0; char h = haluttu.charAt(0); while(true) { char v = sana.charAt(paikka_numero); if(h == v) { break; } else { paikka_numero += 1; } } return paikka_numero; } }
Tämä toimii oletettavasti vähän sinne päin, kuten haluatkin ?
Siis alkuperäinen koodi:ssa muutettu while silmukassa ehtoa.
Edit - Koodisi on hivenen spagettiin vivahtavaa, joten koodin lukeminen ei ole aivan yksinkertaista. Pyri kommentoimaan tekstisi, ja tekemään koodista luettavaa ja kohtalaisen tiivistä. Siis ohjelmoidessa yksi pahimpia virheitä on CTRL+C, CTRL+V:n käyttö, jolloin koodista ei tule helposti muokattavaa/luettavaa.
Koodissasi ei ollut vikaa tiedostojen käsittelyssä, vaan se ettet kirjoittanut muuttujiin niitä tekstejä, joita halusit kirjoittaa tiedostoihin.
Joo, toimii. Tosiaan se koodi on vähän sotkuinen koska itsen on helpompi hahmottaa kokonaisuus siten. Mutta toden näköisesti vielä siistin sen lopuksi.
KIITOS! avusta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.