a zakomentoval si package jak v tvoji praci, tak v DrawingToolu?
Příspěvky odeslané z IP adresy 147.228.209.–
Cau, delam tu samou praci. Mas urcite naimportovanej drawingtool.jar .. to je prave spatne musis si stahnout drawingtool.java nekde na courseware.. nekde to tam je. Hodis si to do toho samyho package a pak uz by to melo fungovat i pres prikazovou radku
jeste doplnim, ze 92 radek uvedeny v chybe je v metode zapsaniDoPole ( cisla[iterace] = sca.nextInt(); )
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);
}
}
}
Ahoj. Mam tu problém. Potřebuji vypisovat dvě pole do souboru pod sebe s naslednym odřádkováním a poté se to opakuje a já potřebuji zapisovat již pod zapsané soubory, tzn. nechci, aby se mi to přepisovalo, což se mi právě stává (i s tím druhým parametrem u FileWriteru true) a už nevim, jak to udělat. Díky moc za případnou radu. Tady kód
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();
}
#3 sakal91
Nejde mi to.. asi spatne chapu metody i kdyz jsem o nich precetl docela dost.. hodi mse svuj celej zdrojak, mohl bys me prosimte nejak poposunout, abych do te metody "grafPosloup" dostal neserazene i serazene pole, abych to mohl vykreslit? A prdem se omlouvam za tu prasarnu sesmolenou v metode "vygenerujPosloupnost" :))
package ukoly2012;
import java.util.*;
import ppa1.DrawingTool;
import java.awt.Color;
public class Ppa1_SP_A12B0522P {
private static final int sirka = 400;
private static final int vyska = 420;
static int scanner(int a) {
Scanner sc = new Scanner(System.in);
System.out.println("Zadej startovaci hodnotu: ");
a = sc.nextInt();
return a;
}
static int [] vygenerujPosloupnost(int []pole) {
int a = 0;
int startovaci = 0;
startovaci = scanner(a);
int [] pole2 = new int [40];
int prubezne; // prubezne kvuli poli
double vysledek;
int vysledek2;
boolean shoda = false;
pole2[0] = startovaci;
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 );
//prubezne = pole[i];
}
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]){
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;
}
public static int[] seradPosloupnost(int []pole) {
pole = vygenerujPosloupnost(pole);
int velikost = pole.length;
System.out.println(velikost + Arrays.toString(pole));
for (int i=0; i<pole.length; i++) {
int tmp = pole[i];
int j = i;
while((j>0) && (pole[j-1] > tmp)) {
pole[j]=pole[j-1];
j--;
}
pole[j]=tmp;
//System.out.println(Arrays.toString(pole));
}
return pole;
}
private static void grafPosloup(DrawingTool dt, int sirka, int vyska) {
int [] serazenepole = null;
serazenepole = seradPosloupnost(serazenepole);
int [] puvodnipole = null;
puvodnipole = vygenerujPosloupnost(puvodnipole);
//vyska = 420;
//sirka = 400;
for(int i = 0; i < puvodnipole.length; i++) {
dt.line(5, 420, 5, 420 - puvodnipole[i]);
}
}
public static void main(String[] args) {
DrawingTool dt = new DrawingTool(400, 420);
int [] policko = null;
grafPosloup(dt, sirka, vyska);
}
}
Zdravim. Mam tu malej problem s metodama a jejich volanim.. programuji semestralni praci (jsem zacatecnik) a mam zatim program.. myslim, ze nepotrebuje presne do detailu popisovat co presne dela.. jen tu nastinim problem, ktery mi vznika
mam metodu "nactiCislo", ktera mi nacita cislo z klavesnice pomoci scanneru, to se ulozi do promenne "a" a tuto hodnotu i vraci, pote metoda "generujPole" mi to nactene cislo umocni, vydeli, pricte jednicku, dokud se hodnota neopakuje, tak to generuje dalsi cisla (to je vcelku jedno) - vznikne mi tak pole o x prvcich (cislech) a toto pole vracim. Dale mam za ukol toto pole seradit vzestupne, cili mam metodu "seradPole" a do ni volam prave navratovou hodnotu z "generujPole", tedy to vygenerovane pole, pole se mi pekne seradi a ja vracim serazene pole a dale potrebuji vizualizovat graf tohoto pole (posloupnosti cisel v nem obsazene), dalsi metoda tedy "udelejGraf" a zde nastava problem.. musim vizualizovat nejprve pole neserazene a pote i pole serazene - na coz tedy potrebuju obe pole, takze si na ne referuji - tedy odkáži se na serazene pole, vse OK.. nojo, ale ja potrebuji pracovat i s tim neserazenym polem a kdyz si na nej dam referenci, tak to po me chce opet zadat hodnotu z klavesnice (opet metoda "nactiCislo") a to ja uz nechci, protoze uz jsem zadaval.. zkratka na to nemuzu prijit jak rozhazet ty reference, zda se mi to neresitelny. :/ Vedel by prosim nekdo, co se s tim da delat? Dekuju