Domanda Aiuto

Stato
Discussione chiusa ad ulteriori risposte.

3llioT

Utente Bronze
15 Ottobre 2016
24
6
1
34
Salve a tutti, sono nuovo nel forum.
E' da un po' che mi diletto nella programmazione java, anche perchè ho seguito il corso all'università e ho voluto riprendere tutti i concetti che avevamo studiato al corso. In questi giorni ho incominciato ad uscire in bici la mattina presto, e mentre pedalavo pensavo al mio prof di informatica che diceva che "java è uno tra i linguaggi più scorrevoli e dinamici dell'informatica e che si può abbinare a tutto". Così ho pensato "ma se java si può abbinare a tutto, perchè non usare java per scrivere un codice che esprima il "moto" della pedalata?" e ho collegato il tutto alla rappresentazione grafica del seno cioè valore massimo 1 valore neutro 0 e valore -1 il più basso, rispettivamente per "1= incremento velocità --> incomincia moto; 0= sei fermo o non stai pedalando; -1= abbassamento velocità causato da attrito o ostacoli esterni vari----> fine moto". Forse è un pensiero abbastanza utopico il mio, ma ho pensato pure che tutto ciò si poteva abbinare ad un eventuale parte meccanica (xD) che simuli il movimento della pedalata (e partendo da questo si poteva creare in teoria qualsiasi tipo di movimento (forse)) e volevo farlo usando java. Secondo voi in java si può creare un codice simile? Scusate per tutta questa utopia ma da "newbie" volevo sapere di più. In attesa di una risposta, vi abbraccio e vi ringrazio a tutti :D a presto!!
 
Hola, in primis ti consiglio di presentarti nella sezione delle presentazioni.
Ora veniamo a noi.
Quasi tutto quello che ti passa per la mente puoi rappresentarlo tramite codice, nel tuo caso è sostanzialmente una questione di formule.
In realtà non ho ben capito dove vuoi arrivare ma se vuoi associare al valore "1" il comando "accelera" puoi farlo, come anche per gli altri due valori.
Comunque se per un tuo progettino o per qualsiasi altra cosa hai bisogno di usare la fisica, ci sono in giro librerie che ti semplificano la vita. Sarebbe impensabile dover conoscere nei minimi dettagli tutto quanto per far spostare ad una determinata velocità un oggetto nello spazio.
La questione del linguaggio di programmazione non è vitale, ci sono PHP e specialmente Python con cui mi trovo bene ( Sono un programmatore web, non si capisce? )
Dipende tutto dalla tecnologia che ti serve per fare una determinata cosa
 
Grazie Kolo93 per la risposta. A tal proposito ho da dirti che non so come codificare la parte relativa all'aumento velocità...soprattutto mi perdo in una parte e sono qui proprio per cercare aiuto. In pratica ho creato la classe bicicletta creando 4 metodi cioè :
1)Cadenza di pedalata (cioè la forza che tu inserisci nel moto del pedalare);
2)Velocita (che comprende incremento e abbassamento di velocità come già citato sopra);
3)Marce (che a loro volta incrementandosi dovrebbero aumentare la velocità).
Ora, potreste dire, il problema dove sta? In pratica ho inizialmente settato la velocità a 0, facendo credere al compiler che la bicicletta è ferma. Per poter pedalare ho, quindi, importato l'util.Scanner facendo inserire come input il numero 1 per partire (il codice, PER ORA, è molto grezzo ma andrò a migliorare via via...). Così mi sono bloccato su un cavolo di if (forse anche sbagliato inserire l'if..) che ho inserito per dire tipo "se--->l'input inserito è 1 allora il sistema stamperà "ho letto come input 1, possiamo partire", altrimenti stampa "ho letto come input 0, restiamo fermi!".
Il problema è che non riesco a codificare questo, in quanto mi trova un errore : non riesce a convertire un int in un boolean (giustamente) all'interno del ciclo if...domanda n 1: come posso fare ciò? cioè leggere un valore e all'interno di un qualsiasi ciclo vedere il valore e vedere se è true o false.
L'altro problema è : in questo caso quello che a me interesserebbe sono due cose:
1) definire in un qualche modo questo tipo di moto attraverso la creazione di un codice;
2) definire il metodo AumentaVelocita, incapsularlo in qualche modo dato che si potrebbe usare più e più volte, in un modo tale da poter essere usato un qualche giorno anche nella classe Macchina.
Grazie per un eventuale risposta! :D

Buongiorno a tutti!!
Sono riuscito a finire di scrivere il codice riguardante la bicicletta...forse anche abbastanza grezzo per ora...l'ide di java non ha riscontrato nessun errore...il problema ora è il seguente: all'interno del codice ho importato lo Scanner per far leggere al client l'input inserito...fin qui tutto bene...quando vado a lanciare il programma, quest ultimo si avvia per un nano secondo o proprio per pochissimo non dandomi nessuna direttiva su quale input inserire...ed esce sopra la finestra della console la stringa:"<terminated> Bicicletta [Java Application] C: eclipse/bin/javaw.exe (22 ott 2016, 13;43:58)...come posso risolvere il problema? Ho fatto anche un banalissimo programma della somma sempre con Scanner per vedere se mi dava sempre lo stesso problema ed effettivamente me lo da... :\:ehm: grazie a tutti per l'eventuale risposta :)
 
Forse non ho capito bene il progetto che intendi sviluppare, ma se intendi lavorare in contesti materiali ed aggiungere una parte meccanica non ti conviene operare con una board tipo arduino? Potresti utilizzare un sensore per leggere la velocità o la posizione dei pedali, utilizzare il processore per i tuoi calcoli matematici ed un display per la visualizzazione dei dati elaborati


Inviata da iPhone tramite app ufficiale di Inforge.net
 
Buonasera w4sd e grazie per la risposta! Ti consiglio bene di leggere il mio primo post all'interno di questa discussione così capirai meglio cosa intendo fare..ma te lo dico ugualmente io di nuovo: vorrei, attraverso la programmazione java, capire se si può sviluppare un codice che riguardi la dinamica della bicicletta ma in maggior modo quello proprio della pedalata...sono riuscito proprio in maniera grezza a scrivere questo codice, ma se ci fosse in java una specie di package o di libreria proprio riguardante la fisica (se c'è io non so come si inserisce) che mi aiuti in qualche modo a poter scrivere sotto forma di codice le formule della dinamica della fisica... comunque dopo aver capito come scrivere il codice ho usato lo Scanner per poter ricevere i dati dell'input che io ho usato per poter calcolare la velocità e i giri al minuto della pedalata e per poter capire quale marcia e quale corona si è inserito...il problema dove sta? Sta nel fatto che quando lancio il programma questo non mi da tempo di poter scrivere l'input nella console perchè si lancia e si chiude in un nano secondo tipo :/... e sopra la console esce la stringa: <terminated> Bicicletta [Java Application] C: eclipse/bin/javaw.exe (22 ott 2016, 13;43:58)...non so come poter lanciare il programma e continuare a scrivere l'input per poter verificare se tutto ciò che ho scritto si possa fare o meno...come hai detto tu sarebbe stato meglio usare il microprocessore Arduino e qualche sensore ma a dire la verità non so nè programmare arduino e so poco di elettronica anche avevo già in mente una specie di calcolatore simile... se qualcuno avesse in mente come poter risolvere il problema ogni soluzione è ben accetta >_> :sisi: Grazie e buona serata!!!
 
Purtroppo Java non è il mio forte, e non saprei come aiutarti.
Per quanto riguarda Arduino invece posso dirti che sia la parte elettronica sia la parte di programmazione sono di immediata comprensione. Nel caso in cui volessi avventurarti nello studio ti lascio il link di un buon simulatore per iniziare a sperimentare:https://circuits.io/
In bocca al lupo per il tuo progetto!
 
Ti ringrazio lo stesso w4sd per il tuo aiuto!! Vorrei cercare di poter trasferire qualche giorno ciò che ho detto e fatto in java in arduino magari per poter vedere davvero se si può descrivere un'intensità vera e propria di pedalata con una determinata inclinazione di piano...io comunque sono sempre del parere del mio professore di università, il quale ha detto che con java (dato che studiavamo java e l'oop) e qualsiasi altro linguaggio di programmazione si poteva scrivere qualsiasi cosa tramite codice...comunque resta ancora valida la richiesta di aiuto per trovare una soluzione :)
 
Descrivi il programma che hai intenzione di realizzare in base a come l'utente dovrà interagirci, ad esempio: l'utente inserisce ___ in input e vede in output i valori riguardanti ___. Ho capito che vuoi simulare il funzionamento di una bicicletta, ma non ho capito qual'è la sostanza.

Inutile dirti che se il programma crashsa a runtime dovrai postare il codice per darci la possibilità di capire dov'è il problema. Se lo farai, ricordati di usare il tag code (il simbolo [+] nell'editor dei messaggi) per mantenere una formattazione corretta.
 
Ultima modifica:
Buongiorno St3ve e grazie per la risposta! Penso (?) di aver già detto di aver già inserito la funzione Scanner per leggere l'input e per vedere l'output dei valori inseriti... Comunque vorrei simulare il funzionamento di una bicicletta sì, ma in maniera più concentrata proprio la simulazione della dinamica della pedalata...ho già capito che non penso sia così facile perchè le librerie che ci sono non aiutano tanto... la sostanza è vedere se con java si potrebbe fare una specie di strumento, quasi come un calcolatore, che mi dica quanta intensità devo applicare nella pedalata e quanti rpm devo fare per poter superare un piano con una certa inclinazione x...cioè quello che avrei voglia di capire è se sia possibile tramite codificazione rappresentare delle vere e proprie situazioni di vita odierna ma anche delle vere e proprie sensazioni umane...non ho trovato nessuna documentazione sul web nemmeno riguardante altri linguaggi di programmazione quindi penso sia una cosa letteralmente IMPOSSIBILE...cmq se leggi il mio primo post di questa discussione penso di aver detto cosa mi piacerebbe fare riguardo il fatto della bicicletta...ma penso che sia molto difficile...ho scritto il codice ma in maniera proprio proprio grezza quasi come se fosse una bozza per vedere se ero riuscito nell'intento...il problema è che java nel codice non mi trova errori, ma quando lancio il programma questo crasha...e non so perchè...e Ti dirò di più che non mi è mai capitato o_O:rolleyes:
 
Buongiorno St3ve e grazie per la risposta! Penso (?) di aver già detto di aver già inserito la funzione Scanner per leggere l'input e per vedere l'output dei valori inseriti... Comunque vorrei simulare il funzionamento di una bicicletta sì, ma in maniera più concentrata proprio la simulazione della dinamica della pedalata...ho già capito che non penso sia così facile perchè le librerie che ci sono non aiutano tanto... la sostanza è vedere se con java si potrebbe fare una specie di strumento, quasi come un calcolatore, che mi dica quanta intensità devo applicare nella pedalata e quanti rpm devo fare per poter superare un piano con una certa inclinazione x...cioè quello che avrei voglia di capire è se sia possibile tramite codificazione rappresentare delle vere e proprie situazioni di vita odierna ma anche delle vere e proprie sensazioni umane...non ho trovato nessuna documentazione sul web nemmeno riguardante altri linguaggi di programmazione quindi penso sia una cosa letteralmente IMPOSSIBILE...cmq se leggi il mio primo post di questa discussione penso di aver detto cosa mi piacerebbe fare riguardo il fatto della bicicletta...ma penso che sia molto difficile...ho scritto il codice ma in maniera proprio proprio grezza quasi come se fosse una bozza per vedere se ero riuscito nell'intento...il problema è che java nel codice non mi trova errori, ma quando lancio il programma questo crasha...e non so perchè...e Ti dirò di più che non mi è mai capitato o_O:rolleyes:
La cosa migliore che puoi fare è postare qui il codice, tramite i tag code (anche utilizzando Pastebin), e cosa molto importante, l'intero errore.
 
Non hai trovato niente sul web semplicemente perché ne parli in modo troppo astratto, però se mi dici:
la sostanza è vedere se con java si potrebbe fare una specie di strumento, quasi come un calcolatore, che mi dica quanta intensità devo applicare nella pedalata e quanti rpm devo fare per poter superare un piano con una certa inclinazione x
Allora non ci vedo niente di strano. Basta che raccogli informazioni sulla meccanica classica, trasformi le tue idee in quello che sostanzialmente è matematica (un po' di vettori forza, un po' di vettori velocità) e passare a java è elementare. Dal tuo primo (e anche negli altri) post ho letto un sacco di idee astratte, ma dal momento in cui vuoi spiegare ad un computer cosa deve fare il primo step dev'essere quello di renderle concrete: far inserire all'utente l'inclinazione di un piano per poi calcolare quanti newton devi applicare ai pedali è un'idea concreta (che ha poco a che fare con la programmazione e tanto a che fare con la fisica), rappresentare situazioni di vita e proprie sensazioni umane è un'idea astratta, che potrebbe o non potrebbe essere realizzabile a seconda di come la riformulerai in modo concreto.

Non c'è niente di strano nel fatto che il compilatore java non trovi errori, ma il codice crasha a runtime. Potrebbe essere causato da diversi errori nel codice (divisione per zero, uso di metodi su variabili NULL, ecc...). Se non ti va di postare tutto il codice, puoi provare ad isolare il problema (creare un codice molto piccolo che abbia lo stesso comportamento) e postarci solo lo stretto indispensabile.

Ho fatto anche un banalissimo programma della somma sempre con Scanner per vedere se mi dava sempre lo stesso problema ed effettivamente me lo da
Il modo corretto di utilizzare la classe Scanner per eseguire la somma tra due numeri è questo:
Java:
import java.util.Scanner;

public class Prova {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Inserisci a: ");
        float a = scanner.nextFloat();

        System.out.print("Inserisci b: ");
        float b = scanner.nextFloat();

        float c = a+b;
        System.out.println("a + b = " + c);
    }
}
Se salvi questo codice in un file Prova.java e lo esegui, dovrebbe funzionarti correttamente.
 
Java:
import java.util.*;
public class Bicicletta {
 

    public static void main(String[] args){}
        public double CadenzaDiPedalata;
        public int AumentoVelocita;
        public int Marce;
        private Scanner distanza;
        private Scanner tempo;
        private Scanner diamRuota;
        private Scanner marcia;
        private Scanner corona;
        private double rPM;
 
        public Bicicletta(double RPM, int Velocita, int setGear){
            CadenzaDiPedalata = RPM;
            AumentoVelocita = 0;
            Marce = setGear ;
        }
     
             
public void CadenzaDiPedalata(){
    //{ ( D / T ) / [ d * 3,14159 * (dM / dP) ] } = RPM\\
    //D = Distanza percorsa in metri
    //T = Tempo impiegato in minuti
        //    d = diametro ruota incluso gomma in metri
            //3,14159 = valore di pi greco
            //dM = denti Moltiplica anteriore
            //dP = denti Pignone posteriore
            //RPM = numero di pedalate al minuto
    //sapendo che una bici ha come standard 3 corone e prendendo come standard 8 rapporti
    //avremo:
    //1a corona (la piu piccola)= 22 denti 2a corona= 32 denti 3a corona=44 denti---->denti corona
    //1 rapporto=28 2=24 3=21 4=19 5=17 6=15 7=13 8=11----> denti pignone
    System.out.println("Inserire la distanza percorsa in metri");
distanza = new Scanner(System.in);
    System.out.println("Ho letto metri" +distanza +"Inserire i minuti impiegati");
tempo = new Scanner(System.in);
    System.out.println("Ho letto" +tempo +"Inserire il diametro della ruota in metri");
    diamRuota = new Scanner(System.in);
    System.out.println("Ho letto" +diamRuota +"Inserire i denti rispettivi alla marcia scelta");
    marcia = new Scanner(System.in);
    System.out.println("Ho letto" +marcia +"Inserire i denti rispettivi alla corona scelta");
    corona = new Scanner(System.in);

    int n1 = distanza.nextInt();
    int n2 = tempo.nextInt();
    int n3 = diamRuota.nextInt();
    int n4 = marcia.nextInt();
    int n5 = corona.nextInt();
    setrPM((n1/n2) / ((n3*3.14159)*(n5/n4)));
 
 
}




public double getrPM() {
    return rPM;
}


public void setrPM(double rPM) {
    this.rPM = rPM;
}




public class AumentoVelocita {
    private Scanner incrementoV;

    public AumentoVelocita (int Incremento){
        System.out.println("Inserire un numero compreso tra 0 e 1 per partire");
        incrementoV = new Scanner(System.in);
        float AumentoVelocita = incrementoV.nextFloat();
        System.out.println("Ho letto:" +AumentoVelocita);
        System.out.println("possiamo partire!");
        int IncrementoVelocita= 0;
        while (IncrementoVelocita>0 && IncrementoVelocita<1)
        {
            IncrementoVelocita++;
        }
        if(IncrementoVelocita==0)
        System.out.println("Non hai inserito una velocità.");
        System.out.println("Restiamo fermi!");
        }
         
     
     
     
     
     
    }
public class Marce {
private int marce;
private int corone;
private Scanner inserisciM;
private Scanner inserisciC;
private double velocita;

public void Rapporti(){
    setMarce(1);
    setCorone(1);
    //Inizializzo Marce e Corone = 1, cioè al rapporto più basso
    System.out.println("Scegli una marcia da inserire e ricorda che arrivano fino a 8!");
    inserisciM = new Scanner(System.in);
    int MarciaInserita = inserisciM.nextInt();
    System.out.println("Adesso scegli una corona, ricordandoti che ce ne sono 3!");
    inserisciC = new Scanner(System.in);
    int CoronaInserita = inserisciC.nextInt();
    setVelocita(0);
    while(MarciaInserita<=8 && CoronaInserita<=3){
        setVelocita(getVelocita() + 1);
    }
}

public double getVelocita() {
    return velocita;
}

public void setVelocita(double velocita) {
    this.velocita = velocita;
}

public int getCorone() {
    return corone;
}

public void setCorone(int corone) {
    this.corone = corone;
}

public int getMarce() {
    return marce;
}

public void setMarce(int marce) {
    this.marce = marce;
}
}



 
{

{
             
}
}
 
}


Vi ripeto che la scrittura del codice è molto grezza e l'ho scritta così (magari per qualcuno in maniera MOLTO sbagliata ed INEFFICENTE) per curiosità e per vedere se si poteva fare ciò che avevo in mente...mi scuso per la "sbagliata" stesura del codice..
Errore_console.png

comunque il problema è che l'applicazione crasha e (sempre se l'immagine si vede) mi da quel tipo di stringa cioè <terminated> Bicicletta [Java Application] C: eclipse/bin/javaw.exe (22 ott 2016, 13;43:58) senza nemmeno darmi il tempo di inserire l'input..
 
Sì, la stesura del codice è decisamente grezza e "sbagliata", ma non c'è niente di cui tu debba scusarti. Ti ho fixxato giusto lo stretto indispensabile per sbloccarti e permetterti di andare avanti:
Java:
import java.util.*;
public class Bicicletta {

    public double CadenzaDiPedalata;
    public int AumentoVelocita;
    public int Marce;
    private Scanner scanner = new Scanner(System.in);
    private double rPM;

    public static void main(String[] args){
        Bicicletta b = new Bicicletta(10, 20, 1);
        b.CadenzaDiPedalata();
    }

    public Bicicletta(double RPM, int Velocita, int setGear){
        CadenzaDiPedalata = RPM;
        AumentoVelocita = 0;
        Marce = setGear ;
    }

    public void CadenzaDiPedalata(){
        //{ ( D / T ) / [ d * 3,14159 * (dM / dP) ] } = RPM\\
        //D = Distanza percorsa in metri
        //T = Tempo impiegato in minuti
        //    d = diametro ruota incluso gomma in metri
        //3,14159 = valore di pi greco
        //dM = denti Moltiplica anteriore
        //dP = denti Pignone posteriore
        //RPM = numero di pedalate al minuto
        //sapendo che una bici ha come standard 3 corone e prendendo come standard 8 rapporti
        //avremo:
        //1a corona (la piu piccola)= 22 denti 2a corona= 32 denti 3a corona=44 denti---->denti corona
        //1 rapporto=28 2=24 3=21 4=19 5=17 6=15 7=13 8=11----> denti pignone

        // NOTA: per alcune cose dovrai usare i float
        System.out.println("Inserire la distanza percorsa in metri");
        int n1 = scanner.nextInt();
        System.out.println("Ho letto metri" +n1 +"Inserire i minuti impiegati");
        int n2 = scanner.nextInt();
        System.out.println("Ho letto" +n2 +"Inserire il diametro della ruota in metri");
        int n3 = scanner.nextInt();
        System.out.println("Ho letto" +n3 +"Inserire i denti rispettivi alla marcia scelta");
        int n4 = scanner.nextInt();
        System.out.println("Ho letto" +n4 +"Inserire i denti rispettivi alla corona scelta");
        int n5 = scanner.nextInt();

        setrPM((n1/n2) / ((n3*3.14159)*(n5/n4)));
    }

    public double getrPM() {
        return rPM;
    }

    public void setrPM(double rPM) {
        this.rPM = rPM;
    }

    public class AumentoVelocita {
        private Scanner incrementoV;

        public AumentoVelocita (int Incremento){
            System.out.println("Inserire un numero compreso tra 0 e 1 per partire");
            incrementoV = new Scanner(System.in);
            float AumentoVelocita = incrementoV.nextFloat();
            System.out.println("Ho letto:" +AumentoVelocita);
            System.out.println("possiamo partire!");
            int IncrementoVelocita= 0;
            while (IncrementoVelocita>0 && IncrementoVelocita<1)
            {
                IncrementoVelocita++;
            }
            if(IncrementoVelocita==0)
                System.out.println("Non hai inserito una velocità.");
            System.out.println("Restiamo fermi!");
        }
    }

    public class Marce {
        private int marce;
        private int corone;
        private Scanner scanner;
        private double velocita;

        public void Rapporti(){
            setMarce(1);
            setCorone(1);
            //Inizializzo Marce e Corone = 1, cioè al rapporto più basso
            System.out.println("Scegli una marcia da inserire e ricorda che arrivano fino a 8!");
            int MarciaInserita = scanner.nextInt();
            System.out.println("Adesso scegli una corona, ricordandoti che ce ne sono 3!");
            int CoronaInserita = scanner.nextInt();
            setVelocita(0);
            while(MarciaInserita<=8 && CoronaInserita<=3){
                setVelocita(getVelocita() + 1);
            }
        }

        public double getVelocita() {
            return velocita;
        }

        public void setVelocita(double velocita) {
            this.velocita = velocita;
        }

        public int getCorone() {
            return corone;
        }

        public void setCorone(int corone) {
            this.corone = corone;
        }

        public int getMarce() {
            return marce;
        }

        public void setMarce(int marce) {
            this.marce = marce;
        }
    }
}

Alcune note:
  • se vuoi sviluppare un programma (e non una libreria), devi riempire il main (per questo avevi un crash);
  • la classe scanner non si usa in quel modo, ti ho banalmente sistemato quel pezzo di codice;
  • le altre classi pubbliche non si innestano nella classe principale, ma si mettono in un file separato (non che sia sbagliato quello che stai facendo, ma non è il modo migliore di procedere);
 
Buonasera St3ve! Ti ringrazio per la risposta e Vi chiedo ancora scusa per la sbagliata stesura del codice...purtroppo ho ripreso java solo ora dopo 4 anni, dopo aver lasciato l'Università per cause di forze maggiori... cercherò di migliorare giorno dopo giorno... volevo solo vedere se mi ricordavo qualcosa :rofl: comunque ti ringrazio molto di avermi fatto notare dove ho sbagliato e cosa ho sbagliato CORREGGENDOLO!! Grazie ancora e buona serata!!! ;)
 
Stato
Discussione chiusa ad ulteriori risposte.