Dichiarazione in costrutto di selezione

di il
1 risposte

Dichiarazione in costrutto di selezione

Salve ho iniziato a programmare la scorsa settimana, e ho prodotto questo codice:
import java.util.Random;
import java.util.Scanner;
import java.io.*;
import java.lang.Math;


public class Esercizio4


{
public static void main(String []args)
{
String path = "D:/Downloads/stazioni.txt";
Random random = new Random();
Scanner in = new Scanner(System.in);
System.out.println("leggere da file le stazioni? 1 si");
int i=0,j=0,collegamento,controllo=0,k=0,t=0;
int leggere= in.nextInt();
int[] arraytemp = new int[100];
String stringa="";
int partenza,arrivo;
String stazioni="";
int prob=0;
/*if(leggere ==1)
{
prob=1;
char[] testo = new char[50];
int size = 0;
String s="a";
char a = s.charAt(0);

try
{
File file = new File(path);
FileReader fr = new FileReader(file);
size = fr.read(testo);
System.out.print("Caratteri presenti: " + size + "\n");
for(i=0; i<size; i++)
{
StringBuilder sb = new StringBuilder();
for(j=i;testo[j]!=a;j++)
{
sb.append(testo[j]);
stringa = sb.toString();
}
i=j;
int val = Integer.parseInt(stringa);
arraytemp[k]=val;
k++;
}
fr.close();
}

catch(IOException e)
{
e.printStackTrace();
}
int[] distanze = new int[k];
int[] provenienze = new int[k];
boolean[] visitato = new boolean[k];
int radice = (int)Math.sqrt(k);
int[][] matrice = new int [radice][radice];
for(i=0;i<radice;i++)
for(j=0;j<radice;j++)
{
matrice[j]=arraytemp[t];
t++;
}


}
else
{
*/
System.out.println("inserisci numero stazioni");
int ns = in.nextInt();
int[][] matrice = new int [ns][ns];
int[] distanze = new int[ns];
int[] provenienze = new int[ns];
boolean[] visitato = new boolean[ns];

for(i=0;i<ns;i++)
{
for(j=0;j<ns;j++)
{
if(i!=j)
{
collegamento = random.nextInt(6);
if(collegamento!=0)
matrice[j]= collegamento;
else
matrice[j]=999;
System.out.println("posizione "+i +j + "valore "+matrice[j]);
}
else
{
matrice[j]=0;
System.out.println("posizione "+i +j + "valore "+matrice[j]);
}
}
}
try
{
File file = new File(path);
if (file.exists())
System.out.println("Il file " + path + " esiste");
else
if (file.createNewFile())
System.out.println("Il file " + path + " è stato creato");
else
System.out.println("Il file " + path + " non può essere creato");

}
catch (IOException e)
{
e.printStackTrace();
}

for(i=0;i<ns;i++)
for(j=0;j<ns;j++)
stazioni = stazioni+matrice[j]+"a";
System.out.println("Salvare le stazioni su file 1= si?");
int decisione= in.nextInt();
if (decisione==1)
{
try
{
File file = new File(path);
FileWriter fw = new FileWriter(file);
fw.write(stazioni);
fw.flush();
fw.close();
System.out.println("Il file stazioni è stato salvato");
}

catch(IOException e)
{
e.printStackTrace();
}
}
//}
System.out.println("Inserisci fermata di partenza");
partenza= in.nextInt();
while(partenza>=ns)
{
System.out.println(" Partenza non valida Inserisci fermata di partenza");
partenza= in.nextInt();
}
System.out.println("Inserisci fermata di Arrivo");
arrivo= in.nextInt();
while(arrivo>=ns)
{
System.out.println(" arrivo non valido Inserisci fermata di partenza");
arrivo= in.nextInt();
}
while (arrivo==partenza)

while (arrivo==partenza)
{
System.out.println("arrivo= partenza Inserisci di nuovo fermata di Arrivo");
arrivo= in.nextInt();
}
for (i=0; i<ns; i++)
{
distanze = 100;
provenienze = -1;
visitato = false;
}
int nodoAttuale, minDistanza;
nodoAttuale = partenza;
distanze[partenza] = minDistanza = 0;
while (nodoAttuale != arrivo && minDistanza != 100)
{
minDistanza = 100;
for (j=0; j<ns; j++)
if (!visitato[j] && distanze[j] < minDistanza)
{
minDistanza = distanze[j];
nodoAttuale = j;
}
visitato[nodoAttuale] = true;
for (j=0; j<ns; j++)
{
if (matrice[nodoAttuale][j] != 100 && distanze[j] > distanze[nodoAttuale] + matrice[nodoAttuale][j])
{
distanze[j] = distanze[nodoAttuale] + matrice[nodoAttuale][j];
provenienze[j] = nodoAttuale;
}
}
}
for(i=0;i<ns;i++)
System.out.println(visitato[i]+" ");
if(!visitato[arrivo])
System.out.println("Non esiste collegamento");
else
{
System.out.println("Ci mette "+ distanze[arrivo]+ "minuti");
i = arrivo;
System.out.println("percorso a ritroso: ");
while (i != partenza)
{
System.out.println("Stazione toccata: "+i);
i = provenienze[i];
}
System.out.println("Stazione toccata: "+i);
}
}


}
non capisco perchè se tolgo la parte commenta, alla compilazione di ma il problema che"
int ns = in.nextInt();
int[][] matrice = new int [ns][ns];
int[] distanze = new int[ns];
int[] provenienze = new int[ns];
boolean[] visitato = new boolean[ns];"non sono dichiarate.
In realtà io le dichiaro con dimensione diversa in in tutte e due le diramazioni del if....quindi non ha senso il fatto che successivamente dica che non è dichiarato. Qualcuno mi aiuta?

1 Risposte

  • Re: Dichiarazione in costrutto di selezione

    Ciao, se elimini i commenti in modo che l'if-else sia ripristinato, quello che succede è che crei le variabili ns, matrice, ecc.. come variabili locali all'interno dell'else. Questo comporta la loro eliminazione una volta usciti dal ramo else.
    In altre parole quelle variabili esistono solamente all'interno del ramo "else"
Devi accedere o registrarti per scrivere nel forum
1 risposte