2014-08-28 4 views
-2

по всей точке этой программы: «Напишите программу, которая запрашивает у пользователя целое число от 2 до 10 и выводит все целые числа от 1 до 100, за исключением целочисленных кратных номер, введенный пользователем (modulois полезен) Например, если пользователь ввел 9, ваша программа должна распечатать все номера от 1 до 100, за исключением тех, которые были напечатаны программой 1. " Проблема, с которой я сталкиваюсь, заключается в том, что программа печатает точную противоположность тому, что я хочу сделать! Распечатывает все кратные введенного числа :( Я студент, поэтому совет и помощь приветствуются, но больше всего я хотел бы узнать, как ДУМАТЬ о решении этой программы, чтобы помочь мне в будущем. Спасибо всем :)Имея проблему в моей программе Java

Код:

import java.util.Scanner; 
public class ProgramTwo 
/* 
* 
*/ 
{ 
    public static void main(String[] args) 
    { 
    System.out.println("Enter a number you would like to use: "); 
    Scanner sc=new Scanner(System.in); 
    int eviltwinNumb=sc.nextInt(); 
    for(int i=eviltwinNumb; i<=100; i+=eviltwinNumb) 
    { 
     if(i%i != 0) 
     { 
      i++; 
     } 

     System.out.println(+i); 
    } 
    } 
} 
+1

Что? Шутки в сторону? я% я? Это всегда будет 0 – Nabin

ответ

1

вы начинаете цикл по набранному номеру, и увеличиваем я на это число в каждом шаге, и ваше состояние не имеет никакого значения вообще (это никогда не верно). Вот почему ваш код печатает именно те числа, которые вы не хотите печатать (eviltwinNumb, 2 * eviltwinNumb, 3 * eviltwinNumb, ...).

Вы должны увеличивать i всего на 1 на каждом шаге и печатать его только в том случае, если (i%eviltwinNumb != 0).

+0

Цените помощь :) – various

0

попробовать

for(int i=1; i<=100; i++) // loop from 1 to 100 
{ 
    if(i%eviltwinNumb != 0) // if not an exact multiple of eviltwinNumb 
    { 
     System.out.println(i); // print it 
    } 
} 
+0

Большое спасибо за вашу помощь :) – various

0

Во-первых, я объясню, почему это не работать. Цикл начинается с установки i на введенный номер, и каждая итерация по циклу вы увеличиваете i на выбранный номер с i += eviltwinNumb. Таким образом, вы только рассматриваете кратность данного числа. Кроме того, ваш оператор if никогда не будет вызван, потому что i% i = 0 для всех i, поэтому он в настоящее время бесполезен (подумайте об этом - любое число, деленное на себя, всегда будет иметь остаток, что и оператор модуля (%), вычисляет).

Вместо этого вам следует подумать о том, как печатать цифры кроме кратных. Для этого вы должны учитывать каждое число от 1 до 100, поэтому цикл for должен начинаться с i=1 до 100. Затем для каждого номера i вы должны рассмотреть, является ли оно кратным eviltwinNumb. Вы можете сделать это с помощью i % eviltwinNumb. Если это a несколько, не распечатать. Или, скорее, если это не a несколько, do напечатайте его. Таким образом, вы должны печатать только i, когда i % eviltwinNumb != 0.

Чтобы увидеть полный пример, см. Сообщение Страшно Wombat, но, надеюсь, эта дискуссия помогла вам понять.

+0

Спасибо, человек :) Теперь это имеет для меня гораздо больше смысла. – various

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