2016-02-07 5 views
-1

Мне нужно, чтобы этот код идентифицировал символ, который не является буквой. Ну, это не все, что он делает, но это проблема, которую я испытываю. Я думал, что у меня есть правильный код, и похоже, что он работает, но он также подбирает буквы. Вот код.Программа, похоже, обходит строку кода

import java.util.Scanner; 

public class AlphaPos { 
    public static void main(String[] args) { 
    java.util.Scanner input = new java.util.Scanner(System.in); 
     System.out.println(" Please enter an upper or lowercase letter. "); 
      String letter = input.nextLine(); 
      String alpha = " abcdefghijklmnopqrstuvwxyz"; 
      String beta = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     if ((letter != alpha) && (letter != beta)); 
       System.out.println(" You entered " +letter+ ", and you obviously can't follow directions."); 

     boolean hasUppercase = !letter.equals(letter.toLowerCase()); { 
      if (hasUppercase) 
       System.out.println("Your letter is " +letter+ ", Uppercase, and its number is "+ beta.indexOf(letter)); 

     boolean hasLowercase = !letter.equals(letter.toUpperCase()); 
      if (hasLowercase) 
       System.out.println("Your letter is " +letter+ " ,lowercase , and its number is "+ alpha.indexOf(letter)); 
                     } 

    } 
    } 
+1

Почему вы сравниваете одну букву со всем верхним или нижним регистром? – null

+0

Школьный проект. Это не имеет реальной цели. – Beatz

ответ

0

Я боюсь, что ваш код показывает значительное замешательство в отношении того, как работает Java.

String letter = input.nextLine(); 

Это читает всю строку, а не только одна буква

String alpha = " abcdefghijklmnopqrstuvwxyz"; 
String beta = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
if ((letter != alpha) && (letter != beta)); 

Эта последняя строка не рассматривает letter, чтобы увидеть, если он совпадает с одним из персонажей. Он сравнивает letter и alpha, чтобы определить, являются ли они ссылками на ту же строку, которой они никогда не будут.

Кроме того, завершающая точка с запятой завершает оператор, так что следующая строка

System.out.println(" You entered " +letter+ ", and you obviously can't follow directions."); 

выполняет несмотря ни на что до него - это не является «то» часть if заявления.

Предположим, что пользователь ввел одну букву, за которой следует клавиша ENTER. Если вы хотите, чтобы убедиться, что символ был пробел или буква s вы могли бы сделать что-то вроде этого:

if (letter.matches("[a-zA-Z ]") ... 

но будет работать только тогда, когда один символ был введен. Я мог бы продолжить, но вам нужно узнать немного больше о Java, а StackOverflow на самом деле не является учебным сайтом.

+0

Я - экстремальный новичок в Java, поэтому поэтому этот код невелик. Любые советы о том, как заставить его работать, хотя? – Beatz

0

Чтобы проверить, набрал ли пользователь письмо, вы должны использовать метод contains. Он не работает, потому что вы сравниваете одну букву со целыми строками (в данном случае сравнивая letter с alpha, а затем до beta), чего вы не достигли. Пример кода:

if((!alpha.contains(letter))&&(!beta.contains(letter))) { //do smith }

+0

Ах, это имеет смысл. Огромное спасибо! – Beatz

0

Проблема заключается в том, что вы сравниваете вход в альфа- или бета-значения переменных, которые никогда не соответствуют какому-либо уникальному и действительному письму.

Рекомендуемые изменения:

  • точка с запятой после вашего «если» это отменив действие условия , линия «System.out.println ...» всегда будет работать с этого.Удалите точку с запятой (и даже лучше, добавить фигурные скобки после условия )
  • Удалить начальные пробелы в «альфа» и «бета»
  • Убедитесь, что пользователь ввел только одну букву либо проверки или взяв первый характер
  • Тогда, предполагая, что письмо имеет только один символ, вы можете изменить условие:

    if(!(alpha.contains(letter) || beta.contains(letter))) 
    

Так я внесите следующие изменения:

 //Changed this line to use the first non-blank character 
     //You may need to perform a length check before calling substring. 
     String letter = input.nextLine().trim().substring(0, 1); 
     String alpha = "abcdefghijklmnopqrstuvwxyz"; 
     String beta = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     if(!(alpha.contains(letter) || beta.contains(letter))){ 
      System.out.println(" You entered " +letter+ ", and you obviously can't follow directions."); 
     } 
     //And the rest of your code... 
Смежные вопросы