Načtení čísel ze souboru – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Načtení čísel ze souboru – Java – Fórum – Programujte.comNačtení čísel ze souboru – Java – Fórum – Programujte.com

 

ne-věd
~ Anonymní uživatel
3 příspěvky
8. 9. 2012   #1
-
0
-

Ahoj,

chtěl bych někoho zdvořile požádat o návrh řešení dvou případů. Osobně s Javou začínám a mám problémy i se syntaxí některých základních prvků... Příklady jsou, věřím, značně jednoduché a velmi by mi to pomohlo. Snad se tu najde někdo, kdo by rád předvedl své programátorské umění ;-)!

1.) Jde o to, vytvořit program schopný načíst ze souboru xy.txt obsah. Dále zjistit, kolikrát se v něm opakuje ta která číslice od 0 do 9 a vytvořit výstup ve formátu

- číslice 0 je v souboru 5krát

- číslice 1 je v souboru 3krát

- ...

xy.txt:

1 3 5 7 9
1 1 1 3 1 5 1 7 1 9
2 1 2 3 2 5 2 7 2 9
3 1 3 3 3 5 3 7 3 9
4 1 4 3 4 5 4 7 4 9
5 1 5 3 5 5 5 7 5 9
6 1 6 3 6 5 6 7 6 9
7 1 7 3 7 5 7 7 7 9
8 1 8 3 8 5 8 7 8 9
9 1 9 3 9 5 9 7 9 9

2.) Program načte se souboru xz.txt všechna čísla do pole, to následně seřadí vzestupně a seřazené pole vypíše. Následně ještě zobrazí aritmetický průměr všech daných čísel.

xz.txt:

1  3 5 7 9
11 13 15 17 19
21 23 25 27 29
31 33 35 37 39
41 43 45 47 49
51 53 55 57 59
61 63 65 67 69
71 73 75 77 79
81 83 85 87 89
91 93 95 97 99
101 103 105 107 109
111 113 115 117 119
121 123 125 127 129
131 133 135 137 139
141 143 145 147 149
151 153 155 157 159
161 163 165 167 169
171 173 175 177 179
181 183 185 187 189
191 193 195 197 199
201 203 205 207 209

Nahlásit jako SPAM
IP: 90.181.200.–
vlado09910
Návštěvník
8. 9. 2012   #2
-
0
-

Ahoj, rozdelim to na niekolko casti:

1) nacitanie suboru.. to asi si uz urobil len napisem: 

BufferedReader br = new BufferedReader(new FileReader(xy.txt));
  while ((line = br.readLine()) != null)
  {
    ... tu budes riesit zaznamy v kazdom riadku

  }

2) musis si povedat cim su oddelene zaznamy v riadku tzv. delimiter (vidim ze to je asi medzera)

3) samotna logika ulohy1: pred prikazom while nastavim premennu napr. x1 = 0 pre pocet vyskytov cisla 1

a kazdy riadok by som rodelil na pole a to presiel cize: 1 3 5 7 9

String[] s = line.split(" ");

for(int i = 0; i< s.length; i++){

if(s[i].equals("1")){

x1 += 1; 

}

}

Je to dost zjednodusene kedze vidim ze su tam len cisla od 0-9

Pre ulohu 2:

Vytvorim si pole cisel (integer) java.util.ArrayList<Integer> al

Znovu to v kazdom riadku splitnem na pole podla delimitera

String[] s = line.split(" ");

a nasledne by som kazdy zaznam  porovnal ci je v tom zozname "al"

if(! al.contains(Integer.parseInt(s[i])))

al.add(Integer.parseInt(s[i]))

takto popridavam do zoznamu (al) len jedinecne zaznamy (string som previedol na int aby by mi to nezoradovalo 1,10,2,3,30,4 ale normalne ako cisla)

A na zaver ked mam vsetky jedinecne cisla v zozname, tak ten zoznam zoradim:

Collenctions.sort(al);

Nahlásit jako SPAM
IP: 92.245.193.–
ne-věd
~ Anonymní uživatel
3 příspěvky
9. 9. 2012   #3
-
0
-

Díky za bleskovou reakci! Došel jsem k tomuhle výsledku, ale kvůli něčemu se nemůžu pohnout dál :-/. Program se zkompiluje (o to je to horší :-), ale je tam logická chyba. Prostě stále vypisuje správnou hodnotu pouze u čísla "1", ale u ostatních píše počet "0". Jinak pole proměnných jsem vynechal, aby to bylo jednodušší (je zakomentované). 

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
 
public class dva {
	public static void main(String[] args) {
		
		/*
		byte[] poctyCisel;
		poctyCisel = new byte[9];
		
		for (byte a = 0; a < 9; a++) {
			poctyCisel[a] = 0;
		}
		*/
		
		try {
			FileInputStream fis = new FileInputStream("cislice2.txt");
			BufferedReader br = new BufferedReader(new InputStreamReader(fis));
			String strLine;
			
			for (byte k = 1; k < 10; k++) {
				byte x = 0;
				while ((strLine = br.readLine()) != null) {
					String[] s = strLine.split(" ");
					for (int i = 0; i < s.length; i++) {
						if (s[i].equals(String.valueOf(k))) {
							x += 1; 
						}
					}
				}
				System.out.println(k+" je v souboru "+x+" krat");
			}

			
		}
		catch(Exception e) {
			System.out.println(e);
		}
		
	}
}
Nahlásit jako SPAM
IP: 90.181.200.–
ne-věd
~ Anonymní uživatel
3 příspěvky
9. 9. 2012   #4
-
0
-

Vyřešeno!

Program se při zjišťování dalších číslic pouze nevracel na začátek souboru.

Nahlásit jako SPAM
IP: 90.181.200.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý