Scanner a vyjimka – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Scanner a vyjimka – Java – Fórum – Programujte.comScanner a vyjimka – Java – Fórum – Programujte.com

 

George
~ Anonymní uživatel
31 příspěvků
12. 12. 2012   #1
-
0
-

Zdravim, za hodinu odevzdavam semestralni praci.. nevim jak ej to mozne, ale predevcirem po doprogramovani mi vse chodilo.. dnes to chci spustit a ujistit se a hle - nefunguje a vubec netusim proc (resp. tusim, ale nejsem sto najit spravne reseni)

Mam program ktery mi ma cist cisla po radcich ze souboru "vstup.txt", vypocitavat z nich posloupnost a tuto posloupnost zapsat do souboru "vystup.txt" - toto cele jen pokud je na prikazove radce uveden parametr vstup. txt (tzn. java mujprogram vstup.txt) , ale hazi mi to tohle

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at ukoly2012.babica.zapsaniDoPole(babica.java:92)
at ukoly2012.babica.main(babica.java:423)

problem bude ve scanneru, ze ho tam ma dvakrat.. ale jak to mohu predelat tak, aby mi tohle nevyhazovalo

pokud parametr na prikaz.radce zadan neni, program si vyzada vstupni hodnotu z klavesnice, to funguje uplne skvele, ale s tim parametrem ne a ne to spustit i kdyz mi to fungovalo jeste predevcirem. Hodim sem cely kod, diky za pripadnou radu

package ukoly2012;
/**
 * Program generuje pseudonahodnou posloupnost podle zadaneho algoritmu, pote posloupnost seradi.
 *  Zadani startovaci hodnoty bud z klavesnice a vystup do console + vizualizuje posl. v DrawingTool.
 *  Pokud existuje soubor "vstup.txt", tak je vstup presmerovan na tento soubor, ktery obsahuje
 * dvouciferna cisla po radcich
 */
import java.util.*;
import java.io.*;
//import ppa1.*;
import java.awt.*;
/**
 * @author Miroslav Svetly
 *
 */
public class babica {
	
	public static final int vyska = 420; //vyska platna
	public static final String jmeno = "vstup.txt"; //jmeno vstupniho souboru
	//static private Scanner sc = new Scanner(System.in);
	//static private FileReader fr = new FileReader(jmeno);
	//static private Scanner sca = new Scanner(fr);
	
	/**
	 * Zkouma, jestli soubor "vstup.txt" existuje.
	 * Pokud existuje, metoda main presmeruje vstup na vstupni soubor.
	 * Pokud neexistuje, metoda main presmeruje vstup na rucni zadani start.hodnoty.
	 * @return boolean false nebo true
	 */
public static boolean rozhodniSe() {
		
		boolean klavesnice = true;
		try {
			File f = new File(jmeno);
			if (f.exists()) {
				
				klavesnice = false;
			}
			else {
				
				klavesnice = true;
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		return klavesnice;
}
	/**
	 * smaze soubor "vystup.txt"
	 * @throws IOException
	 */
	public static void smazVystup() throws IOException {
		
		File f = new File("vystup.txt"); //smazani souboru "vystup.txt"
		RandomAccessFile raf = new RandomAccessFile(f, "rw");

		raf.setLength(0);

		raf.close();
	}
	
	/**
	 * v pripade vstupu z klavesnice nacte startovaci hodnotu zadanou uzivatelem
	 * @param a
	 * @return startovaci hodnotu zadanou uzivatelem
	 */
		public static int scanner(int a) {
		
		
		
		Scanner sc = new Scanner(System.in);
		System.out.println("Zadej startovaci hodnotu: ");
		a = sc.nextInt(); 
		
		return a;
		
	}
		
		public static int[] zapsaniDoPole() throws IOException {
			int [] cisla = new int[40];
			int [] kopie = null; //kopie pole "cisla"
			int iterace = -1; 
			FileReader fr = new FileReader(jmeno);
			Scanner sca = new Scanner(fr);
			
			
			while(sca.hasNextLine()) { //zapisuje vstupni hodnoty ze souboru do pole
				iterace++;
				kopie = new int[iterace + 1];
				
				cisla[iterace] = sca.nextInt();
				
				
				System.arraycopy(cisla, 0, kopie, 0, iterace + 1 );
			}
			return kopie;
		}
	
	/**
	 * Metoda cte hodnoty ze souboru "vstup.txt" a postupne je uklada do pole.
	 * Pote se pro jednotlive prvky pole vypocitava posloupnost podle zadaneho algoritmu.
	 * Tato posloupnost se uklada do pole.
	 * Overuje jestli ve vygenerovanem poli jiz neni stejna hodnota. 
	 * Po nalezeni shodneho cisla metoda cte dalsi cislo z pole vstupnich hodnot.
	 * Po posledni vstupni hodnote a nalezeni shodneho cisla metoda konci.
	 * @return pole posloupnosti
	 * @throws IOException
	 */	
	public static int [] vygenerujZeSouboru(int [] kopie) throws IOException {
		kopie = zapsaniDoPole();
		/*
		int [] cisla = new int[40];
		int [] kopie = null; //kopie pole "cisla"
		int iterace = -1; 
		FileReader fr = new FileReader(jmeno);
		Scanner sca = new Scanner(fr);
		
		
		while(sca.hasNextLine()) { //zapisuje vstupni hodnoty ze souboru do pole
			iterace++;
			kopie = new int[iterace + 1];
			
			cisla[iterace] = sca.nextInt();
			
			
			System.arraycopy(cisla, 0, kopie, 0, iterace + 1 );
		}		*/
		
		int [] pole = null;
		int [] pole2 = new int [40];
		
				
		for(int g = 0; g < kopie.length; g++) {
			pole = null;
			pole2 = new int [40];
			boolean shoda = false; //shodnost prvku pole v posloupnosti
			
			int prubezne; // prubezne kvuli poli
			double vysledek; 
			int vysledek2; //pretypovani "vysledek" zpet na int
			
			pole2[0] = kopie[g]; //nulty prvek vzdy vstupnim cislem
			for (int i = 0; shoda != true; i++ ) {
			
				pole = new int[i + 1];
				if (i == 0) {
				
			
					vysledek = Math.pow(kopie[g], 2);
					if (vysledek >= 1000) {
						vysledek = Math.floor(vysledek / 100);
						}
					else {
						vysledek = Math.floor(vysledek / 10);
				
						}
				vysledek2 = (int) vysledek + 1;
			
			
				pole2[i + 1] = vysledek2;
				
				System.arraycopy(pole2, 0, pole, 0, 1 );
				
			}
			
			else  {
				prubezne = pole2[i];
				
				
				vysledek = Math.pow(prubezne, 2);
				if (vysledek >= 1000) {
					vysledek = Math.floor(vysledek / 100);
				}
				else {
					vysledek = Math.floor(vysledek / 10);
					
				}
				vysledek2 = (int) vysledek + 1;
			}
			if (i > 0) {
				
				for (int index=0; index<pole2.length; index++){
										
					if (vysledek2 == pole2[index]){ //overuje zdali prvek jiz v posloupnosti neni obsazen
					shoda = true;
					System.arraycopy(pole2, 0, pole, 0, i + 1);
					break;
					}
										
			}
			
				if (shoda == false) { 
				pole2[i + 1] = vysledek2;
				System.arraycopy(pole2, 0, pole, 0, i + 1);
				}
			}
									
		}
			
			
			
			
			seradPosloupnost(pole);
			
		}
	
		
		
		return pole;
		
		
	}
	
	/**
	 * Metoda generuje posloupnosti podle zadaneho cisla z klavesnice.
	 * Udela z nej posloupnost podle zadaneho algoritmu a ulozi ji do pole.
	 * Overuje jestli ve vygenerovanem poli jiz neni stejna hodnota. 
	 * Po nalezeni shodneho cisla metoda konci.
	 * @return pole posloupnosti
	 */
		public static int [] vygenerujPosloupnost() {
		int a = 0;
		int startovaci = 0; // startovaci hodnota
		startovaci = scanner(a);
		
		int [] pole = null;
		int [] pole2 = new int [40];
		
		
		int prubezne; // prubezne kvuli poli
		double vysledek;
		int vysledek2;
		boolean shoda = false;
		
		pole2[0] = startovaci; //nulty prvek pole vzdy startovaci hodnota
		for (int i = 0; shoda != true; i++ ) {
			
			pole = new int[i + 1];
			if (i == 0) {
				
			
				vysledek = Math.pow(startovaci, 2);
				if (vysledek >= 1000) {
					vysledek = Math.floor(vysledek / 100);
					}
				else {
					vysledek = Math.floor(vysledek / 10);
				
					}
				vysledek2 = (int) vysledek + 1;
			
			
				pole2[i + 1] = vysledek2;
				
				System.arraycopy(pole2, 0, pole, 0, 1 );
				
			}
			
			else  {
				prubezne = pole2[i];
				
				
				vysledek = Math.pow(prubezne, 2);
				if (vysledek >= 1000) {
					vysledek = Math.floor(vysledek / 100);
				}
				else {
					vysledek = Math.floor(vysledek / 10);
					
				}
				vysledek2 = (int) vysledek + 1;
			}
			if (i > 0) {
				
				for (int index=0; index<pole2.length; index++){ //overuje zdali prvek jiz v posloupnosti neni obsazen
										
					if (vysledek2 == pole2[index]){
					shoda = true;
					System.arraycopy(pole2, 0, pole, 0, i + 1);
					break;
					}
										
			}
			
				if (shoda == false) {
				pole2[i + 1] = vysledek2;
				System.arraycopy(pole2, 0, pole, 0, i + 1);
				}
			}
									
		}
		
		
		return pole;
		
		
	}
	/**
	 * Pole posloupnosti tato metoda seradi pomoci algoritmu InsertSort.
	 * Pokud je zadavana hodnota z klavesnice, pak tyto pole zobrazi do console.
	 * Pokud jsou hodnoty cteny ze souboru, pak tyto pole zapise do souboru "vystup.txt".
	 * @param pole neserazene pole
	 * @return neserazene pole
	 * @throws IOException
	 */
	
	public static int[] seradPosloupnost(int []pole) throws IOException {
		int[] neserazene = new int[pole.length]; 
		System.arraycopy(pole, 0, neserazene, 0, pole.length);
		
		
		
		boolean ptej = rozhodniSe(); //presmerovani vstupu
		
		
		
		for (int i=0; i<pole.length; i++) { //seradi pole posloupnosti
			int tmp = pole[i];
			int j = i;
			while((j>0) && (pole[j-1] > tmp)) {
			pole[j]=pole[j-1];
			j--;
			}
			pole[j]=tmp;
			
		}
		
	
		
		if(ptej == false) { //pokud ze souboru
	
		try {
			
			PrintWriter vystup = new PrintWriter(new FileWriter("vystup.txt", true));
			vystup.println(pole.length + Arrays.toString(neserazene));
			vystup.println(pole.length + Arrays.toString(pole));
			vystup.println();
			vystup.close();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		
		}
		
		
		return neserazene;
	}
	
	/**
	 * Procedura vizualizace posloupnosti v pripade zadani hodnoty klavesnice.
	 * Vypsani poli do console
	 * @param pole serazene pole
	 * @param neserazene neserazene pole
	 * @param vyska vyska vykreslovaneho platna
	 */	
	public static void grafPosloup(int [] pole, int [] neserazene, int vyska) {
		System.out.println(pole.length + Arrays.toString(neserazene));
		System.out.println(pole.length + Arrays.toString(pole));
		int sirka = 0;
		if(pole.length > 5) { //sirka platna
		sirka = (pole.length- 1)*(24) + 4;
		}
		else {
			sirka = 120; //kvuli minimalni siri platna 100px
		}
		DrawingTool dt = new DrawingTool(sirka, 420, Color.gray);
		
		int temp = -23;
		for(int i = 0; i < neserazene.length; i++) { //vykresleni neserazeneho pole
			
			temp += 23;
			
			for(int j = 0; j <= 20; j++) {
				dt.line(temp + (j + 2),vyska,(temp) + (j + 2), vyska - 2* (neserazene[i]));
				
			}
			
		}
		int temp2 = -23;
		for(int i = 0; i < pole.length; i++) { //vykresleni serazeneho pole
			
			temp2 += 23;
			
			for(int j = 0; j <= 20; j++) {
				dt.line(temp2 + (j + 2),200,(temp2) + (j + 2), 200 - 2* (pole[i]));
				
			}
			
		}
		
		int nasobek = (vyska -20) / 20;
		
		for (int i = 20; i > 0; i--) { //deleni osy Y carami
			dt.setColor(Color.red);
			if (i != 10) {
			dt.line(0, nasobek * i, sirka, nasobek * i);
			}
			else if (i == 10) {
				dt.setColor(Color.green);
				dt.line(0, nasobek * i, sirka, nasobek * i);
				dt.line(0, (nasobek * i) + 1, sirka, (nasobek * i) + 1);
			}
			if (i == 11) {
				dt.setColor(Color.blue);
				dt.line(0, nasobek * i, sirka, nasobek * i);
				//dt.line(0, (nasobek * i) + 1, sirka, (nasobek * i) + 1);
			}
			
		}
		
	}

	/**
	 * Rozhoduje o presmerovani vstupu.
	 * Vola metody, proceduru.
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		

		
		
		
		if (args.length == 0) //pokud vstup z klavesnice
		{
		int[] pole = vygenerujPosloupnost();
		int[] neserazene = seradPosloupnost(pole);

		
		grafPosloup(pole, neserazene, vyska);
		}
		
		else if(args.length != 0){ //pokud zadan parametr
			smazVystup();
			int[] kopie = zapsaniDoPole();
			vygenerujZeSouboru(kopie);
			
			
			
		} 
		
	}

}


Nahlásit jako SPAM
IP: 147.228.209.–
George
~ Anonymní uživatel
31 příspěvků
12. 12. 2012   #2
-
0
-

jeste doplnim, ze 92 radek uvedeny v chybe je v metode zapsaniDoPole ( cisla[iterace] = sca.nextInt(); )

Nahlásit jako SPAM
IP: 147.228.209.–
Redby0
Návštěvník
12. 12. 2012   #3
-
0
-

Teda v tom kodu je spousta nesmyslnejch věcí.. Ale tento problém vyřešíš třeba tak že místo sca.hasNextLine() použiješ sca.hasNext()

Nahlásit jako SPAM
IP: 212.118.224.–
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, 48 hostů

Podobná vlákna

Scanner — založil Jakub

Scanner vlozeni enteru — založil werixon

Formatovany vstup - Scanner — založil wicked

Java.util.scanner — založil Zero

Scanner vně metod — založil Honza

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ý