2015-03-22 3 views
0

Я создаю что-то, что нужно использовать исключительно личное, чтобы генерировать случайный «код», когда это необходимо, и использовать утилиту Scanner для подтверждения, генерируется ли код для определенного типа пользователя, но независимо от того, что я набираю, логическое isFull возвращает false.Java boolean всегда возвращает false со сканером

Благодаря Rohit Jain, я понимаю свою ошибку.

import java.util.*; 

public class Generate { 

public static int minNum = 1; 
public static int maxNum = 9999999; 
public static int maxLast = 9; 
public static int randomGen; 
public static int randomLast; 
public static boolean isFull = false; 
static Scanner uIn = new Scanner(System.in); 

public Generate() { 
    System.out.print("Is the user a Full Affiliate? Y/N \n "); 
    if(uIn.hasNextLine()){ 
    //OLD: if(uIn.equals("Y")){ 
     if(uIn.nextLine().contains("Y"){ //NEW, works. 
      isFull = true; 
     }else{ 
      isFull = false; 
     } 
    } 
    System.out.println("Full Affiliate: " + isFull); 
    System.out.println("Generating Affiliate Reference:"); 
    Generate.randomGen = minNum + (int) (Math.random() * ((maxNum - minNum) +1)); 
    Generate.randomLast = minNum + (int) (Math.random() * ((maxLast - minNum) +1)); 

    if(isFull){ 
     System.out.println("GB" + randomGen + "?" + randomLast + "*"); 
    }else{ 
     System.out.println("GB" + randomGen + "?" + randomLast); 
    } 
} 

public static void main(String[] args){ 
    Generate theNumber = new Generate(); 
} 
} 

Я довольно новыми для использования Java вне Minecraft и Bukkit, так что я думаю, что это что-то относительно просто, что я просто пропустил.

+1

Повторно посмотрите, что вы сравниваете строку '' Y "' с? –

+0

Ой, я просто понял. Я изменил uIn.equals («Y») на uIn.nextLine(). Содержит («Y»), и он отлично работает. Спасибо, что указали это. – Ubuntuu

+0

Я думаю, что лучше всего оставить свой код * неправильным *, я могу ошибаться, но, похоже, лучше не менять код. Возможно, @RohitJain даст ответ. – ChiefTwoPencils

ответ

0

Поскольку вы читаете с клавиатуры вы должны использовать uIn.nextLine() вместо uIn.hasNextLine()

Просто видел вашу правку ... Я бы избавиться от наружной, если функция полностью и использовать только внутренний, если/иначе функция.

+0

Просто удалил внешний оператор if, и все еще работает. Благодарю. – Ubuntuu

+0

Отлично! Обычно вы используете nextLine() при чтении с клавиатуры и hasNextLine() при чтении из файла или строковых данных. – kojow7

+0

Хорошо. Я предпочитаю изучать этот путь (от ошибок), чем читать книги или смотреть видео на YouTube. Это больше, а не просто поглощается. Еще раз спасибо. – Ubuntuu

Смежные вопросы