1
每當我運行這個程序時,for循環總是打印出它裏面的消息2次,然後讓我給它裏面的字符串賦值任何東西,但是它增加了i
變量。for循環讀取前執行兩次
這裏是循環:
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;
}
}
提供完整的代碼。 – 2014-11-05 17:15:11
是的,問題可能出在您的輸入法中。 – Tetramputechture 2014-11-05 17:18:24
stringTest()做什麼,什麼是「垂直」,「水平」和「sc」? – 2014-11-05 17:19:37