2014-11-05 2 views
1

Wenever Я запускаю эту программу, цикл for всегда печатает сообщение внутри него 2 раза, прежде чем позволить мне назначить что-либо строке внутри него, но она увеличивает значение переменной i.для чтения цикла дважды перед выполнением

Вот петля:

String rua; 

for(int i = 1 ; i < horizontal ; i++){ 
    do{ 
     System.out.println("Introduza os "+ vertical + " valores da rua " + i); 
     rua = stringTest("erro", sc); 
    } while(rua.length() != vertical); 
}  

Он всегда печатает сообщение дважды, один с i = 1, а другой с i = 2, прежде чем дать мне назначить какой-либо текст в строку. Я не вижу причин для этого и не могу найти ошибку.

Остальная часть кода в соответствии с просьбой

public class SeriousLand { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner sc = new Scanner(System.in); 

    System.out.println("Quantas ruas horizontais? (valor entre 2 e 50)"); 
    int horizontal = SeriousLand.lerValorNoIntervalo(2, 50, "Pretendo um inteiro entre 2 e 50", sc); 
    System.out.println("Quantas ruas verticais? (valor entre 2 e 50)"); 
    int vertical =SeriousLand.lerValorNoIntervalo(2, 50, "Pretendo um inteiro entre 2 e 50", sc); 
    System.out.println("Qual a rua horizontal do ponto P? (valor entre 1 e "+horizontal+")"); 
    int horiP = SeriousLand.lerValorNoIntervalo(1, horizontal, "Pretendo um inteiro entre 1 e "+ horizontal, sc); 
    System.out.println("Qual a rua vertical do ponto P? (valor entre 1 e " + vertical + ")"); 
    int veriP =SeriousLand.lerValorNoIntervalo(1, vertical, "Pretendo um inteiro entre 1 e " + vertical, sc); 

      String rua; 

      for(int i = 1 ; i < horizontal ; i++){ 
       do{ 
     System.out.println("Introduza os "+ vertical + " valores da rua " + i); 
     rua = stringTest("erro", sc); 

       } 
       while(rua.length() != vertical); 

       }   
      //linha++; 



    /*do { 
     for (int i = 1; i <= horizontal; i++) { 
      System.out.println("Introduza os "+ vertical + " valores da rua " + i); 
      val = true; 
      for (int j = 1; j <= vertical; j++) { 
       int valor = sc.nextInt(); 
       if (valor != '-' || valor != '.') { 
        SeriousLand.imprimeErro(vertical, i); 
        val = false; 
       } 
      } 
      linha++; 
     } 
    }while (linha <= horizontal); 



    */ 
    } 

static String lerSimbolo (String errMess, Scanner sc) { 
    boolean erro = true; 
    String simbolo = ""; 
    do { 
     if (sc.hasNextLine()) { 
     simbolo = sc.nextLine(); // consome a String 
     erro = false; 
     } 
     else { 
     sc.next();  // consome o que lah esteja 
     System.out.println (errMess); 
     }    
    } while (erro); 

    return simbolo; 

} 



/** 
* Ler numero inteiro no canal de leitura 
* @param errMess - mensagem a escrever no System.out caso o valor 
*    acessivel no canal de leitura nao seja um inteiro 
* @param sc - canal de leitura 
* @return valor inteiro 
* @requires errMess != null && sc != null 
*/ 
static int lerInteiro (String errMess, Scanner sc) { 
    int valor = 0; 
    boolean erro = true; 
    do { 
     if (sc.hasNextInt()) { 
     valor = sc.nextInt(); // consome o inteiro 
     erro = false; 
     } 
     else { 
     sc.next();  // consome o que lah esteja 
     System.out.println (errMess); 
     }    
    } while (erro); 

    return valor; 

} 


/** 
* Ler numero inteiro no canal de leitura que esta num dado intervalo 
* @param infLim Limite inferior do intervalo 
* @param supLim Limite superior do intervalo 
* @param errMess Mensagem de erro a apresentar no System.out 
* @param sc Canal de leitura 
* @return um valor entre infLim e supLim 
* @requires sc != null && infLim <= supLim && errMess != null 
*/ 
static int lerValorNoIntervalo(int infLim, int supLim, 
            String errMess, Scanner sc) { 
    int valor = 0; 
    boolean erro; 
    do { 
     valor = lerInteiro (errMess, sc); 
     erro = valor < infLim || valor > supLim; 
     if (erro) 
      System.out.println (errMess); 
    } while (erro); 

    return valor; 
} 

public static int lerValorDaLinha(String rua, int coluna, Scanner sc,String erroMess){ 
    int conta = rua.length() + 1; 
    boolean erro; 
    do { 
     conta = coluna; 
     erro = conta < coluna || conta > coluna; 
     if (erro) 
      System.out.println (erroMess); 
    } while (erro); 
    return conta; 


} 

public static void imprimeErro(int vertical,int linha) { 

    System.out.println("Erro nos valores introduzidos! Tente de novo");  
    System.out.println("Introduza os "+ vertical + " valores da rua " + linha + " : "); 

    } 
    public static String stringTest (String errMess, Scanner sc){ 
     String teste = sc.nextLine(); 
     boolean erro = false; 



     do { 
      teste.replaceAll("-",""); 
      teste.replaceAll(".",""); 



      if(teste.length() == 0) 
       erro = true; 
      else 
       System.out.println(errMess); 
     } 
     while(erro = false); 


     return teste; 

    } 

}

+2

Обеспечить полный код. –

+0

Да, проблема, вероятно, в вашем методе ввода. – Tetramputechture

+0

Что делает stringTest(), что такое «вертикальный», «горизонтальный» и «sc»? –

ответ

0

Сначала вы должны проверить, если строка заполняется только с символом «-» или «» и вы не ссылались, но вам также нужно проверить правильность длины. сделать это, вы должны создать методы для проверки того, что: (код incompleed)

String rua = verificaTamanhoSimbolos(sc, vertical); 

verificaTamanhoSimbolos(Scanner sc, int vertical) { 
boolean erro = true; 
do{ 
erro = true; 
System.out.println("Introduza os "+ vertical + " valores da rua " + i); 
String linha = sc.nextLine(); 
if(verificaTamanho(linha, verticais)) erro = false; 
else System.out.println("Tamanho errado"); 
if(verificaSimbolos(linha)) erro = false; 
else System.out.println("Simbolo errado"); 
}while(erro); 

verificaTamanho(String linha, int verticais) { 
if(linha.length() == verticais) return true; 
else return false 
} 

verificaSimbolos(String linha) { 
boolean erro = true; 
for (int c = 0; c < linha.length(), c++) { 
if (linha.charAt(c) != '-' && linha.charAt(c) != '.') erro = false; 
} 
return erro; 
} 
Смежные вопросы