Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]problema Stringtokenizer

    Ciao ho un problema con la classe Stringtokenizer; devo costruire una classe Blocchi che pone uno sull'altro
    dei blocchi cubici della stessa dimensione

    codice:
    class Torri{
    String nome;
    int blocchi;
    /**- un costruttore che costruisce una torre di cui viene specificato il nome e 
      il numero di blocchi.
    
    - un costruttore che costruisce una torre di cui viene specificato il nome e non contiene blocchi.
    */
    Torri(String nome,int numblocchi){
        this.nome=nome;
        this.blocchi=numblocchi;
    }
    Torri(String nome){
        this(nome,0);
    }
    /**aggiungi(n)
    
    Aggiunge alla torre n blocchi*/
    public int aggiungi(int nblocchi){
        blocchi+=nblocchi;
        return blocchi;
     }
     /**togli(n) 
    
    Toglie dalla torre n blocchi.
    Se la torre ha meno di n blocchi, vengono tolti tutti i blocchi.*/
    public void togli(int nblocchi){
    blocchi-=nblocchi;
    if(blocchi<nblocchi){
        blocchi=0;
    }else
    blocchi-=nblocchi;
    
    }
    /**somma(t)
    
    Restituisce la torre ottenuta sommando alla torre che esegue il metodo la torre t
    specificata dall'argomento.*/
    public int somma(Torri t){
        int somma=0;
        somma+=blocchi+t.blocchi;
        return somma;
    }
    /**toString()
    
    Restituisce una stringa della forma
    
     "nome_torre: numero_blocchi"
    
    Ad esempio, se la torre ha nome "alfa" e contiene 5 blocchi, restituisce la stringa
    
     "alfa: 5" 
    
    */
    public String toString(){
        String s="";
        s+=nome+": "+blocchi;
        return s;
    }
    }
    Il problema è da main:devo leggere da standard input una sequenza
    di linee. Ciascuna linea puo' contenere uno o piu' elementi separati da uno spazio.Le operazioni associate all'input sono le seguenti.
    1) La linea di input ha la forma

    N nome n

    Viene costruita una nuova torre avente il nome specificato e composta da n blocchi
    (si assume n >= 0).

    Ad esempio, se la linea e'

    N alfa 5

    dovra' essere costruita una nuova torre di nome "alfa" avente 5 blocchi.

    2) La linea di input ha la forma

    A n

    Vengono aggiunti all'ultima torre creata al punto 1 n blocchi
    (usare metodo aggiungi).

    Ad esempio,

    A 3

    significa aggiungere 3 blocchi alla torre.

    codice:
    import java.util.*;
    class ProvaBlocchi{
    public static void main(String [] args){
        Scanner sc=new Scanner(System.in);
        String y=sc.nextLine();
        StringTokenizer st=new StringTokenizer(y," ");
        while(st.hasMoreTokens()){
            String s=st.nextToken();
        String i=st.nextToken();
        int num=Integer.valueOf(st.nextToken());
        Torri t=new Torri(i,num);
        int somm=0;
         if(s.equals("A")){
            int num1=Integer.valueOf(st.nextToken());
            int q=t.aggiungi(num1);
            Torri t1=new Torri(i,q);
            somm+=t.somma(t1);
            System.out.println(somm);
    }
    
     y=sc.nextLine();
    }
    
    
    }
    
    }
    Il problema è dal main;infatti il programma mi compila tutto correttamente ma non mi stampa niente...perchè?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    Il problema è dal main;infatti il programma mi compila tutto correttamente ma non mi stampa niente...perchè?
    La prima cosa più evidente è un problema di "logica": Dalla riga non puoi prendere subito 3 token così di brutto. Devi prendere il primo ... è A o N? Se è A ti aspetti ancora solo 1 token, se è N te ne devi aspettare altri 2.

    Qui serve ragionare ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Questo ti salva in un array i tokens in un vettorre poi prova a andare avanti tu
    non è la miglior soluzione ma è una delle tante e questa la puoi riusare in tante situazioni.
    Elimana il while e sostituisci con:
    codice:

    codice:
    Object[] vet = new Object[3];
    for(int j = 0; st.hasMoreTokens(); vet[j] = st.nextToken());
    poi vai avanti tu.
    Ultima modifica di Krek_Stealth; 04-04-2015 a 21:51

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.