McCaan escribió:Puedes poner un metodo q te devuelva el valor de la variable y llamarlo desde la clase principal
Salu2
nemonihil escribió:Muy buenas, soy nuevo en esto del java y tengo un problemilla que a ver si me podéis ayudar a resolverlo.
Resulta que tengo una clase principal desde la cual llamo a una función de otra clase, en esa función declaro una variable a la que le doy un valor. Ahora lo que quiero es llevarme ese valor a la clase principal (la que use para llamar a la función), seguro que es una tontería y lo mas básico de todo pero yo no encuentro la manera de hacerlo :S
Alguien me puede echar un cable?
// Este método recibe un String, opera con él y lo muestra en pantalla (con el método lanzarMensaje)
public void Mayusculas (String s){
String aMayusculas = s.toUpperCase();
lanzarMensaje(aMayusculas);
}
//Este método recibe un String, opera y devuelve otro String.
public String Mayusculas (String s){
String aMayusculas = s.toUpperCase();
return aMayusculas;
}
//Al llamar a este último método, la cosa será así:
String cadena = Mayusculas("Holaquetal");
//Ahora cadena tiene un valor "HOLAQUETAL"
lanzarMensaje(cadena);
package paqueteJava;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
public class VentanaPoliedros {
JFrame miVentana = new JFrame ();
JPanel marPrincipal = new JPanel ();
JPanel marSuperior = new JPanel ();
Font fuente1 = new Font("Arial", 0, 14);
Border linea1 = BorderFactory.createLineBorder(Color.GRAY);
TitledBorder titDatos = BorderFactory.createTitledBorder(linea1,
"Datos", TitledBorder.LEFT, TitledBorder.TOP, fuente1, Color.BLUE);
JPanel marPoliedros = new JPanel ();
JPanel marCalcular = new JPanel ();
JButton botCalcular = new JButton();
JPanel marDatos = new JPanel ();
JPanel marResultado = new JPanel ();
Font fuente2 = new Font("Arial", 0, 14);
Border linea2 = BorderFactory.createLineBorder(Color.GRAY);
TitledBorder titResultado = BorderFactory.createTitledBorder(linea2,
"Datos", TitledBorder.LEFT, TitledBorder.TOP, fuente2, Color.RED);
JLabel etiPoliedro = new JLabel();
String[] lista = {"Tetraedro", "Cubo o hexaedro","Octaedro","Dodecaedro","Icosaedro"};
JComboBox cmbPoliedro = new JComboBox(lista);
JLabel etiArista = new JLabel();
JTextField txtArista = new JTextField (10);
JLabel etiArea = new JLabel();
JLabel etiResultado = new JLabel();
JLabel imgPoliedro = new JLabel();
public VentanaPoliedros (){
miVentana.setSize(900,400);
miVentana.setLocationRelativeTo(null);
miVentana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
miVentana.setLayout(new BorderLayout());
miVentana.add(marPrincipal);
miVentana.setVisible(true);
marPrincipal.add(marSuperior);
marPrincipal.add(marResultado);
marSuperior.add(marPoliedros);
marSuperior.add( marDatos);
marSuperior.add( marCalcular);
marResultado.add( etiArea);
marResultado.add(etiResultado);
marDatos.add( etiPoliedro);
marDatos.add( cmbPoliedro);
marDatos.add(etiArista);
marDatos.add( txtArista);
marCalcular.add( botCalcular);
marPoliedros.add( imgPoliedro);
etiPoliedro.setText("Tipo de poliedro");
etiPoliedro.setFont(new Font("Arial", 1, 10));
etiPoliedro.setHorizontalAlignment(JLabel.CENTER);
etiPoliedro.setPreferredSize( new Dimension(100, 30));
etiArista.setText("Arista(cm)");
etiArista.setFont(new Font("Arial", 1, 10));
etiArista.setHorizontalAlignment(JLabel.CENTER);
etiArista.setPreferredSize( new Dimension(100, 30));
etiArea.setText("Resultado");
etiArea.setFont(new Font("Arial", 1, 10));
etiArea.setHorizontalAlignment(JLabel.CENTER);
etiArea.setPreferredSize( new Dimension(100, 30));
etiResultado.setText("");
etiResultado.setFont(new Font("Arial", 1, 14));
etiResultado.setForeground(Color.BLUE);
etiResultado.setBackground(Color.ORANGE);
etiResultado.setHorizontalAlignment(JLabel.CENTER);
etiResultado.setPreferredSize( new Dimension(100, 30));
etiResultado.setOpaque(true);
botCalcular.addActionListener(new Calcular(cmbPoliedro, txtArista, etiResultado));
botCalcular.setIcon(new ImageIcon(getClass().getResource("Calcular.gif")));
botCalcular.setPreferredSize(new Dimension(80,40));
cmbPoliedro.setFont(new Font("Arial", 1, 10));
cmbPoliedro.setBackground(Color.YELLOW);
cmbPoliedro.setForeground(Color.BLUE);
cmbPoliedro.addActionListener(new Seleccionar(cmbPoliedro, imgPoliedro));
}
public static void main(String[] args) {
new VentanaPoliedros();
}}
package paqueteJava;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Calcular implements ActionListener {
JTextField objArista = new JTextField();
JTextField txtArista = new JTextField();
JComboBox objComboBox = new JComboBox();
JLabel objResultado = new JLabel();
JLabel etiResultado = new JLabel();
double valor;
double area;
double arista;
public Calcular(JComboBox cmbPoliedro,JTextField txtArista,JLabel etiResultado){
objArista = txtArista;
objResultado = etiResultado;
}@Override
public void actionPerformed(ActionEvent arg0) {
if (objArista.getText().equals("")){
JOptionPane.showMessageDialog(null,"Introduce valor en la arista");
return;
}
if (arista < 0){
JOptionPane.showMessageDialog(null, "escribe un valor positivo");
return;
}
try{
arista = Double.parseDouble(objArista.getText().replace(",","."));
switch (objComboBox.getSelectedIndex() +1){
case 1:
area = (Math.pow(arista, 2) * Math.sqrt(3));
break;
case 2:
area = (6 * Math.pow(arista, 2));
break;
case 3:
area = (2 * Math.pow(arista, 2) * Math.sqrt(3));
break;
case 4:
area = (5 * Math.pow(arista, 2) * Math.sqrt(3));
break;
case 5:
area = (3 * Math.pow(arista, 2) * Math.sqrt(25 + 10 * Math.sqrt(5)));
break;
}
DecimalFormat miFormato = new DecimalFormat("#,##0.00");
objResultado.setText(miFormato.format((area)));
}
catch(Exception e1){
JOptionPane.showMessageDialog(null, "Introduce una arista válida");
}
}}
package paqueteJava;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Seleccionar implements ActionListener {
JLabel objImagen = new JLabel();
JLabel imgPoliedro = new JLabel();
JComboBox cmbPoliedro = new JComboBox();
JComboBox objComboBox = new JComboBox();
public Seleccionar (JComboBox cmbPoliedro,JLabel imgPoliedro) {
objImagen = imgPoliedro;
objComboBox = cmbPoliedro;
}
@Override
public void actionPerformed(ActionEvent arg0) {
String seleccion = objComboBox.getSelectedItem() + ".gif";
objImagen.setIcon(new ImageIcon(getClass().getResource(seleccion)));
// TODO Auto-generated method stub
}
}
JButton[]=new JButton[27]
for(i=0;i<26;i++)
{
boto=new JButton("/*trozo de codigo a resolver*/");
}
jomola escribió:Buenas,
necesito hacer una aplicación con interfície gràfica ya que hemos empezado a tratar este tema en la teoría.
Se tienen que mostrar las 27 letras del abecedario solamente esto. Hasta ahora tengo declarado 27 JButton en plan "chapuza" y seguramente se puede hacer de la siguiente forma:JButton[]=new JButton[27]
for(i=0;i<26;i++)
{
boto=new JButton("/*trozo de codigo a resolver*/");
}
a ver si me echan una mano, thanks!
A B C D E F G H J
K L ...
...
container.add(panellBotons, BorderLayout.SOUTH);
jomola escribió:vale ya lo tengo , gracias rintin me ha servido de ayuda. si es k lo tengo que hacer con botones para una practica superior.
tu saves como hacer tres filas de 9 columnas para el abecedario i que esten al sud de la interfaç. (deber ser fácil)
o sea a ver si me explico:A B C D E F G H J
K L ...
...
tengo esto declarado:container.add(panellBotons, BorderLayout.SOUTH);
kek_500 escribió:Aprovecho este hilo para preguntaros sobre una cosilla más relacionadas con netbeans que con java en si
Hace unas semanas me encontré este IDE, multiplataforma que podría ahorrarme bastante esfuerzo en el desarrollo de mis programas en C,dado que las alternativas en linux son... bastante tristonas, geany, kdevelop, codeblocks, eclipse... nunca me terminaron de gustar para un entorno que desde un primer momento me hubiese gustado que fuese igual de simplón que el de visual studio, agradeciendo especialmente un depurador integrado.
Netbeans cumple a la perfección, gdb corriendo en unos clicks, memory leaks en una pestaña aparte (jamás pensé que no tuviera que recurrir a valgrind) pero me encontré con la desagradable experiencia cuando borre unos elementos de mi proyecto, desaparecieron de mi ordenador!!! ¿existe alguna manera de que tan solo se elimine el enlace? No se si me explico, que el archivo quede intacto aunque ya no pertenezca al proyecto. ¿Alguna configuración que haya que cambiar? Mencionar que uso la versión 6.8
mrm_arrasate escribió:kek_500 escribió:...
Yo uso Netbeans para Java, supongo que será lo mismo.
Creo que todo aquello que está dentro de la carpeta del proyecto se borra si lo borras desde Netbeans.
Sin embargo, si esta fuera creo que suele abrir una nueva ventana con un toggle para indicar si quieres o no borrar el archivo físico del ordenador.
Sino siempre te queda la manera cutre, que es copiar el archivo a otra ubicación antes de borrarlo desde netbeans, más bale curarse en salud.
Un saludo,
public void progress(int bytesread, long l, byte[] bytes, Map map) {
float progressUpdate = (float) (bytesread * 1.0f / bytesLength * 1.0f);
int progressNow = (int) (bytesLength * progressUpdate);
sliderProgreso.setMaximum((int) bytesLength);
sliderProgreso.setValue(progressNow);
System.out.println(bytesread);
System.out.println(bytesLength);
if(bytesread%bytesLength == 0){
System.out.println("PASO");
try {
int siguiente = listaReproduccion.getSelectedIndex() + 1;
File cancion = (File)cancionesEnReproduccion.get(siguiente);
reproductor.open(cancion);
reproductor.startPlayback();
} catch (BasicPlayerException ex) {
Logger.getLogger(VentanaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
} catch(IndexOutOfBoundsException indexout){
System.err.println("No hay mas canciones");
}
}
}
public static int[][] asdf (int[][] matriz, int x, int y){
asdf(??,x,y)
ivanchi69 escribió:buenas estoy empezando con esto de java (bueno llevo tiempo pero ahora es en serio jajaja) y tenia una duda, 1º yo estoy haciendo un applet el caso que abro ventana me meto en la dirección del applet (en local) carga, mete usuario y contraseña (porque así va el programa) la valida y tendría que pasar a una segunda pantalla que no se pasar.... es decir tengo una pantalla donde introduces user y pass y si son correctos debería pasar a una segunda pero no se como hacer que se vea esa segunda (se hacerlo con ventanas pero el profesor no nos deja hacer eso) no se si es una pregunta muy tonta pero bueno....
salu2
viejozorro escribió:Que IDE? Netbeans 6.9 o Eclipse Helios?
JJMD escribió:Tengo una duda dudosa xDD
Tengo que crear un método que se le de como argumento una matriz y una coordenada de esa matriz.
sería así el método?public static int[][] asdf (int[][] matriz, int x, int y){
si lo estoy haciendo correcto... en el main cómo daría la matriz junto con las coordenadas???asdf(??,x,y)
public static int asdf (int[][] matriz, int x, int y)
int[][] unaMatriz = <inicializas aquí como te de la gana, etc> //argumento
int x = <de donde saques el dato> //argumento
int y = <de donde saques el dato> //argumento
int resultado = asdf(unaMatriz, x, y);
public class Recursivo {
private int valores[] = {12, 13, 25, 34, 56, 75, 16, 78, 11, 65, 89};
public int cal (int a, int b)
{
int i = (a+b)/2;
if (a<=b) {
return (valores[i]%2) + cal(a, i-1) + cal(i+1, b);
}
else {
return 0;
}
}
}
pakopa escribió:Podrías explicar más o menos que es lo que pretendes hacer exactamente?
Nagaroth escribió:pakopa escribió:Podrías explicar más o menos que es lo que pretendes hacer exactamente?
Lamentablemente lo único que pretendo hacer es lo que he puesto, es una práctica que tengo que hacer que consiste en pasar ese método recursivo a no recursivo llevo 2 días dándole vueltas pero solo he conseguido resultados parciales
Gracias!
pakopa escribió:Si, vaya tela, le he echado un ojillo, pero ando algo pillado para ponerme a fondo.
si a > b devuelve 0, ok, pero si a < b devuelve el modulo de 2 del elemento en la posición (media aritmética de a y b):x + f(a, x-1) + f(x +1, b)...
Que rayada, no?
public int cal2 (int a, int b)
{
int total = 0;
if (a<=b){
for (int i=a;i<=b;i++){
total+= valores[i]%2;
}
return total;
}
else
return 0;
}
Duqe escribió:Buenas.
A ver queria hacer el juego de los barcos y habia pensado crear una matriz para el tablero y luego, para cada barco, crear un objeto. No tengo muy claro como situarlos en el tablero. Habia pensado en crear un 2o tablero (matriz, del mismo tamaño que el original) cada vez que creo un barco, y compararlo con el anterior. Por si el barco nuevo ocupa una de las casillas que ya ha ocupado algun otro barco. Si es correcto, la nueva matriz pasa a ser el tablero. Y si no lo es, vuelvo a situar el barco hasta que no ocupe el espacio de otro.
La cuestion es, declaro la variable tablero auxiliar como global? O como comparo asi las matrices?
Pd: Soy nuevo en java. Es facil que este haciendo y/o diciendo tonterias.
import java.util.Random;
public class DotComObjects {
public int[][] setBarcos(int tablero[][]) {
boolean repetido; //Variable booleana para comprobar si una casilla ya esta ocupada por otro barco
do {
repetido = false; //Suponesmos que no esta ocupada ninguna de las casillas
Random aRandom = new Random();
boolean horizontal = aRandom.nextBoolean(); //Booleana al azar para la colocacion del barco. True = horizontal, false = vertical
if (horizontal == true) { //Si el barco va en horizontal
int ancho = aRandom.nextInt(tablero.length - 2); //Calculamos al azar la casilla
int alto = aRandom.nextInt(tablero[0].length); //central del barco (tendra 3)
if ((tablero[ancho - 1][alto] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho + 1][alto] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
} else { //Si el barco va en vertical
int ancho = aRandom.nextInt(tablero.length); //Calculamos al azar la casilla
int alto = aRandom.nextInt(tablero[0].length - 2); //central del barco (tendra 3)
if ((tablero[ancho][alto - 1] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho][alto + 1] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
}
} while (repetido == true); //Repetimos hasta que no haya una casilla ocupada (variable repetido = false)
if (horizontal == true) { //Si el barco va en horizontal
tablero[ancho - 1][alto] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho + 1][alto] = 1;
} else { //Si el barco va en vertical
tablero[ancho][alto - 1] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho][alto + 1] = 1;
}
return tablero; //Devolvemos el tablero con el barco colocado
}
}
Duqe escribió:Eso he leido en varios sitios ya. Lo global es tema tabu.
Editado:
Esto me da error:import java.util.Random;
public class DotComObjects {
public int[][] setBarcos(int tablero[][]) {
boolean repetido; //Variable booleana para comprobar si una casilla ya esta ocupada por otro barco
do {
repetido = false; //Suponesmos que no esta ocupada ninguna de las casillas
Random aRandom = new Random();
boolean horizontal = aRandom.nextBoolean(); //Booleana al azar para la colocacion del barco. True = horizontal, false = vertical
if (horizontal == true) { //Si el barco va en horizontal
int ancho = aRandom.nextInt(tablero.length - 2); //Calculamos al azar la casilla
int alto = aRandom.nextInt(tablero[0].length); //central del barco (tendra 3)
if ((tablero[ancho - 1][alto] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho + 1][alto] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
} else { //Si el barco va en vertical
int ancho = aRandom.nextInt(tablero.length); //Calculamos al azar la casilla
int alto = aRandom.nextInt(tablero[0].length - 2); //central del barco (tendra 3)
if ((tablero[ancho][alto - 1] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho][alto + 1] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
}
} while (repetido == true); //Repetimos hasta que no haya una casilla ocupada (variable repetido = false)
if (horizontal == true) { //Si el barco va en horizontal
tablero[ancho - 1][alto] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho + 1][alto] = 1;
} else { //Si el barco va en vertical
tablero[ancho][alto - 1] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho][alto + 1] = 1;
}
return tablero; //Devolvemos el tablero con el barco colocado
}
}
El error es el mismo, ancho/alto/horizontal cannot be resolved to a variable. Esta marcado en negrita. El resto de clases estan bien.
Pd: No me apedreeis. Estoy empezando con java y el curso de programacion hace casi 1 año que lo hice (C y Delphi). Y desde entonces practicamente no he vuelto a hacer nada.
import java.util.Random;
public class DotComObjects {
public int[][] setBarcos(int tablero[][]) {
boolean repetido; //Variable booleana para comprobar si una casilla ya esta ocupada por otro barco
boolean horizontal;
int ancho;
int alto;
do {
repetido = false; //Suponesmos que no esta ocupada ninguna de las casillas
Random aRandom = new Random();
horizontal = aRandom.nextBoolean(); //Booleana al azar para la colocacion del barco. True = horizontal, false = vertical
if (horizontal == true) { //Si el barco va en horizontal
ancho = aRandom.nextInt(tablero.length - 2); //Calculamos al azar la casilla
alto = aRandom.nextInt(tablero[0].length); //central del barco (tendra 3)
if ((tablero[ancho - 1][alto] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho + 1][alto] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
} else { //Si el barco va en vertical
ancho = aRandom.nextInt(tablero.length); //Calculamos al azar la casilla
alto = aRandom.nextInt(tablero[0].length - 2); //central del barco (tendra 3)
if ((tablero[ancho][alto - 1] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho][alto + 1] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
}
} while (repetido == true); //Repetimos hasta que no haya una casilla ocupada (variable repetido = false)
if (horizontal == true) { //Si el barco va en horizontal
tablero[ancho - 1][alto] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho + 1][alto] = 1;
}
else { //Si el barco va en vertical
tablero[ancho][alto - 1] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho][alto + 1] = 1;
}
return tablero; //Devolvemos el tablero con el barco colocado
}
}
klausus escribió:Buenas estoy creando un programa en java y estoy atascado en una tontería muy muy básica pero como lleve meses sin tocarlo pues no me acuerdo y no puedo avanzar...
Pues desde en el main creo 2 boolean y llamo a un método el cual me calcula 2 valores booleanos y quiero que se asocien a las variables del main.
EL problema es que si los intento pasar por referencia java no me deja ya que pasa por valor y por ende hace una clonación del valor y no lo devuelve.
Si las hago Globales las variables el main me da errores y tonterías de que no se puede referenciar dese un contexto estático algo no estático @_@
Esto mismo también me pasa si el método que intento llamar no es "Static void", es decir si es "boolean" el método al que llamo se queja también, y el main tiene que ser "Static void" ya que si no lo es me dice que no hay main el netbeans.
package robot;
/**********************
* *
* @author Klausus *
* *
**********************/
import java.awt.Color;
import java.awt.Robot;
import java.awt.Rectangle;
import java.awt.Toolkit;
public class Main
{
boolean Barra = false;
boolean Netbook = false;
public static void main(String[] args) throws Exception
{
}
public void DetectarBarra() throws Exception
{
Robot R= new Robot();
Rectangle area = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
int Height = area.height-600;
int Width = area.width-1024;
boolean Barra = false;
boolean Netbook = false;
// Red (Windows Logo)
Color WinR = R.getPixelColor(17,580 + Height);
// Green (Windows Logo)
Color WinG = R.getPixelColor(25,580 + Height);
// Blue (Windows Logo)
Color WinB = R.getPixelColor(15,587 + Height);
// Yellow (Windows Logo)
Color WinY = R.getPixelColor(22,590 + Height);
// Clock Color
Color Clock = R.getPixelColor(1020 + Width ,580 + Height);
if (area.width == 1024 && area.height == 600)
Netbook = true;
else
Netbook = false;
if ( (WinR.getRed() == 255 && WinR.getGreen() == 173 && WinR.getBlue() == 98) &&
(WinG.getRed() == 143 && WinG.getGreen() == 218 && WinG.getBlue() == 11) &&
(WinB.getRed() == 170 && WinB.getGreen() == 191 && WinB.getBlue() == 255) &&
(WinY.getRed() == 251 && WinY.getGreen() == 202 && WinY.getBlue() == 11) )
Barra = true;
else
Barra = false;
System.out.println("Barra: " + Barra + " Netbook: " + Netbook);
this.Barra = Barra;
this.Netbook = Netbook;
}
}
public class Main{
public Main(){
DetectarBarra();
}
public static void main(String[] args){
Main m = new Main();
}
}
Jonri escribió:Y por que no llamas a DetectarBarra() en el constructor y en el main lo unico que haces es un new de la clase?public class Main{
public Main(){
DetectarBarra();
}
public static void main(String[] args){
Main m = new Main();
}
}
Jonri escribió:Creas un objeto para poder usar las funciones no estáticas.
Por que tantos problemas para crear un objeto?
frekency escribió:Bueno este hilo no lo habia visto y me vendrá de perlasDuqe escribió:Eso he leido en varios sitios ya. Lo global es tema tabu.
Editado:
Esto me da error:import java.util.Random;
public class DotComObjects {
public int[][] setBarcos(int tablero[][]) {
boolean repetido; //Variable booleana para comprobar si una casilla ya esta ocupada por otro barco
do {
repetido = false; //Suponesmos que no esta ocupada ninguna de las casillas
Random aRandom = new Random();
boolean horizontal = aRandom.nextBoolean(); //Booleana al azar para la colocacion del barco. True = horizontal, false = vertical
if (horizontal == true) { //Si el barco va en horizontal
int ancho = aRandom.nextInt(tablero.length - 2); //Calculamos al azar la casilla
int alto = aRandom.nextInt(tablero[0].length); //central del barco (tendra 3)
if ((tablero[ancho - 1][alto] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho + 1][alto] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
} else { //Si el barco va en vertical
int ancho = aRandom.nextInt(tablero.length); //Calculamos al azar la casilla
int alto = aRandom.nextInt(tablero[0].length - 2); //central del barco (tendra 3)
if ((tablero[ancho][alto - 1] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho][alto + 1] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
}
} while (repetido == true); //Repetimos hasta que no haya una casilla ocupada (variable repetido = false)
if (horizontal == true) { //Si el barco va en horizontal
tablero[ancho - 1][alto] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho + 1][alto] = 1;
} else { //Si el barco va en vertical
tablero[ancho][alto - 1] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho][alto + 1] = 1;
}
return tablero; //Devolvemos el tablero con el barco colocado
}
}
El error es el mismo, ancho/alto/horizontal cannot be resolved to a variable. Esta marcado en negrita. El resto de clases estan bien.
Pd: No me apedreeis. Estoy empezando con java y el curso de programacion hace casi 1 año que lo hice (C y Delphi). Y desde entonces practicamente no he vuelto a hacer nada.import java.util.Random;
public class DotComObjects {
public int[][] setBarcos(int tablero[][]) {
boolean repetido; //Variable booleana para comprobar si una casilla ya esta ocupada por otro barco
boolean horizontal;
int ancho;
int alto;
do {
repetido = false; //Suponesmos que no esta ocupada ninguna de las casillas
Random aRandom = new Random();
horizontal = aRandom.nextBoolean(); //Booleana al azar para la colocacion del barco. True = horizontal, false = vertical
if (horizontal == true) { //Si el barco va en horizontal
ancho = aRandom.nextInt(tablero.length - 2); //Calculamos al azar la casilla
alto = aRandom.nextInt(tablero[0].length); //central del barco (tendra 3)
if ((tablero[ancho - 1][alto] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho + 1][alto] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
} else { //Si el barco va en vertical
ancho = aRandom.nextInt(tablero.length); //Calculamos al azar la casilla
alto = aRandom.nextInt(tablero[0].length - 2); //central del barco (tendra 3)
if ((tablero[ancho][alto - 1] == 1) || (tablero[ancho][alto] == 1) || (tablero[ancho][alto + 1] == 1)) { //Si una de las casillas ya esta ocupada
repetido = true; //Variable booleana repetida en true
}
}
} while (repetido == true); //Repetimos hasta que no haya una casilla ocupada (variable repetido = false)
if (horizontal == true) { //Si el barco va en horizontal
tablero[ancho - 1][alto] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho + 1][alto] = 1;
}
else { //Si el barco va en vertical
tablero[ancho][alto - 1] = 1;
tablero[ancho][alto] = 1; //Colocamos el barco en el tablero
tablero[ancho][alto + 1] = 1;
}
return tablero; //Devolvemos el tablero con el barco colocado
}
}
Hay lo tienes arreglado he visto algunos fallos de estructura, te comento:
Las variables a ser posible créalas al comienzo no las crees dentro de bucles, porque se puede dar el caso de que no se cumpla la condición del bucle y no entre y por lo tanto no se cree por eso te daba error más abajo ya que esas variables no existían.
Luego dentro del bucle defines ancho y alto dos veces, cuando digo defines me refiero al tipo.
Bueno hay te he puesto el codigo, una cosa nose si ya se ha comentado pero veo preferentemente poner los codigos en paginas como http://pastebin.com/ ya que mantienen la estructura del codigo y no aparece todo alineado a la izquierda si lo ponemos como spoiler lo que ahorra un poco de trabajo a la hora de limpiarlo.
Por ejemplo: http://pastebin.com/nDE4sF7q
Espero servirte de ayuda, Saludos.
PD: Veo que estas haciendo el hundir barquitos?, yo tengo uno hecho con interfaz gráfico ademas por si te interesa dímelo y te lo paso.
frekency escribió:No es que te finalicen las variables sino que java cuando tu vas escribiendo te va interpretando lo que pones y cuando llego al punto despues del bucle no supo de donde eran esas variables porque calculo la posibildad de no entrar al bucle.
for (int i=0; i<10; i++) {
System.out.println(i); //Esto compila, la variable 'i' es accesible dentro del bucle.
}
i = i +5; //Esto no compila
int i;
for (i=0; i<10; i++) {
System.out.println(i); //Esto compila, la variable 'i' es accesible dentro del bucle.
}
i = i +5; //Esto ya si compila, porque el scope de la variable es ahora el método completo y no solo el bucle