Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

DarkUser

вопрос

Рекомендованные сообщения

import java.io.*;
public class а {
   public static void main(String args[])
       throws IOException {
       int p;
       int n;
       int rp;
       int rs;
       int s;
       char i;
       BufferedReader br_p=new
       BufferedReader(new InputStreamReader(System.in));
       System.out.println("Введите p");
       p= br_p.read();

      {BufferedReader br_n=new
       BufferedReader(new InputStreamReader(System.in));
       System.out.println("Введите n");
       n= br_n.read();
       }

       {System.out.println("Процентная ставка простая или сложная? Ввод: простая- п; сложная - c");
        BufferedReader br_i=new
        BufferedReader(new InputStreamReader(System.in));
       i=(char) br_i.read();}

       switch (i) {
               case 'п':
                   BufferedReader br_rp=new
                   BufferedReader(new InputStreamReader(System.in));
                   System.out.println("Введите процентную ставку");
                   rp= br_rp.read();
                   rp=rp/10;
                   s=  (p*(1+(n*rp)));
                   System.out.println("Сумма долга "+s);
                   break;

               case 'с':
                   BufferedReader br_rs=new
                   BufferedReader(new InputStreamReader(System.in));
                   System.out.println("Введите процентную ставку");
                   rs= br_rs.read();
                   rs=rs/10;
                   s=p*(1+rs)^n;
                   System.out.println("Сумма долга "+s);
                  break;

       }
}
}

неправильно высчитывает s. за яву сел пару дней назад и вот с налету что-то неолучается понять почему неправильно.

программировал задачу вычисления суммы долга по простой сложной ставке. p=500 n=4 rs(сложная процентная ставка)=10 rp(простая процентная ставка)=10. на бумаге в первом случае получается 700 во втором 732. прога выдает в первом случае 11077 во втором 317 о_О. со старшенством операций и типами данных вроде нормально все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
import java.io.*;
public class а {
   public static void main(String args[])
       throws IOException {
       int p;
       int n;
       int rp;
       int rs;
       int s;
       char i;
       BufferedReader br_p=new
       BufferedReader(new InputStreamReader(System.in));
       System.out.println("Введите p");
       p= br_p.read();

      {BufferedReader br_n=new
       BufferedReader(new InputStreamReader(System.in));
       System.out.println("Введите n");
       n= br_n.read();
       }

       {System.out.println("Процентная ставка простая или сложная? Ввод: простая- п; сложная - c");
        BufferedReader br_i=new
        BufferedReader(new InputStreamReader(System.in));
       i=(char) br_i.read();}

       switch (i) {
               case 'п':
                   BufferedReader br_rp=new
                   BufferedReader(new InputStreamReader(System.in));
                   System.out.println("Введите процентную ставку");
                   rp= br_rp.read();
                   rp=rp/10;
                   s=  (p*(1+(n*rp)));
                   System.out.println("Сумма долга "+s);
                   break;

               case 'с':
                   BufferedReader br_rs=new
                   BufferedReader(new InputStreamReader(System.in));
                   System.out.println("Введите процентную ставку");
                   rs= br_rs.read();
                   rs=rs/10;
                   s=p*(1+rs)^n;
                   System.out.println("Сумма долга "+s);
                  break;

       }
}
}

неправильно высчитывает s. за яву сел пару дней назад и вот с налету что-то неолучается понять почему неправильно.

программировал задачу вычисления суммы долга по простой сложной ставке. p=500 n=4 rs(сложная процентная ставка)=10 rp(простая процентная ставка)=10. на бумаге в первом случае получается 700 во втором 732. прога выдает в первом случае 11077 во втором 317 о_О. со старшенством операций и типами данных вроде нормально все.

 

У тебя формула неправильная, rs и rp надо делить на 100.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

недогнал как в идее 8 включить чтоб значение переменных при выполнении показывались сделал так:

import java.io.*;
public class а {
   public static void main(String args[])
       throws IOException {
       int p;
       int n;
       float rp;
       int rs;
       float s,k,r,t;
       char i;
       BufferedReader br_p=new
       BufferedReader(new InputStreamReader(System.in));
       System.out.println("Введите p");
       p= br_p.read();

      {BufferedReader br_n=new
       BufferedReader(new InputStreamReader(System.in));
       System.out.println("Введите n");
       n= br_n.read();
       }

       {System.out.println("Процентная ставка простая или сложная? Ввод: простая- п; сложная - c");
        BufferedReader br_i=new
        BufferedReader(new InputStreamReader(System.in));
       i=(char) br_i.read();}

       switch (i) {
               case 'п':
                   BufferedReader br_rp=new
                   BufferedReader(new InputStreamReader(System.in));
                   System.out.println("Введите процентную ставку");
                   rp= br_rp.read();
                   rp=rp/100;

                   k=n*rp;
                   System.out.println("k= "+k);
                   r=1+k;
                   System.out.println("r= "+r);
                   t=p*r;
                   System.out.println("t= "+t);
                   //s=  p*(1+n*rp);
                   //System.out.println("Сумма долга "+s);
                   break;

               case 'с':
                   BufferedReader br_rs=new
                   BufferedReader(new InputStreamReader(System.in));
                   System.out.println("Введите процентную ставку");
                   rs= br_rs.read();
                   rs=rs/100;
                   s=p*(1+rs)^n;
                   System.out.println("Сумма долга "+s);
                  break;

       }
}
}

после этого получаем вот такой вывод:

 

Введите p

500

Введите n

4

Процентная ставка простая или сложная? Ввод: простая- п; сложная - c

п

Введите процентную ставку

10

k= 25.48

r= 26.48

t= 1403.44

 

получается 4*0,1=25.48 о_О

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почитайте документацию к идее, так как включив дебаг вы бы сразу нашли в чем ошибка. А ошибка такая. Дело в том, что BufferedReader.read() выдает не считанную строку переведенную в int, а только код первого считанного символа. Для получения всей строки надо пользоваться readLine(). Должно получиться что-то типа этого:

public static void main(String args[]) throws IOException {
int p;
int n;
float rp;
int rs;
float s,k,r,t;
char i;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите p");
p = Integer.parseInt(br.readLine());

System.out.println("Введите n");
n = Integer.parseInt(br.readLine());

System.out.println("Процентная ставка простая или сложная? Ввод: простая - п; сложная - c");
i = br.readLine().charAt(0);

switch (i) {
case 'п':
	System.out.println("Введите процентную ставку");
	rp = Float.parseFloat(br.readLine());
	rp = rp / 100;

	k=n*rp;
	System.out.println("k= "+k);
	r=1+k;
	System.out.println("r= "+r);
	t=p*r;
	System.out.println("t= "+t);
	//s= p*(1+n*rp);
	//System.out.println("Сумма долга "+s);
	break;

case 'с':
	System.out.println("Введите процентную ставку");
	rs = Integer.parseInt(br.readLine());
	rs = rs / 100;
	s = p*(1+rs)^n;
	System.out.println("Сумма долга "+s);
	break;
}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо. решил идею сменить на нетбинс т.к. идея умундряется тормозить даже в общем-то на некислом компе.идем дальше: проверить является ли число степенью двойки

import java.io.*;
public class Main {
   public static void main(String[] args) 
           throws IOException {
           int i,b;
           float a;
           BufferedReader br=new
           BufferedReader(new InputStreamReader(System.in));
           System.out.println("Введите a");
           a= Integer.parseInt(br.readLine());
           b=0;
           do{
           a=a/2;

           b++;

           if(a%2!=0 ){
           System.out.println("число не является степенью двлйки");
               break;
           }
           else continue;
           } while(a!=1);
           if(a==1){System.out.println("число  является степенью двойки");}


   }

}

если вести например 257 то пролетает нормально, а если ввести правильное 256 то надпись число "неявляется степенью двойки" появляется всеравно, но в месте с тем появляется и нужная надпись

п.с. в инете нашел несколько более продвинутых алгоритмов, а это то что первое в голову пришло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Во-первых что за переменная b которая нигде не используется? Она для красоты сделана? Во-вторых надпись что число не является конечно будет вылезать потому что условие выхода из цикла a != 1 а внутри цикла соответственно a делится на 2 и рано или поздно оно станет = 1 (чтобы из цикла выйти) и появится строчка о том что число не делистя. А проверять на степень мне кажется надо сдвигом << маски. Проверить сначала на 1 например а потом сдвигать влево на 1 бит. То есть маска будет например 1 -> 2 -> 4 -> 8 итд. И проверять пока маска < нашего числа. То есть типа того что-то:

int a = 123;
int Mask = 1;
while ((a | Mask != Mask) && (Mask < a) && (Mask > 0))
{
 Mask = Mask << 1;
}
if (Mask != a)
{
 System.out.println("число не является степенью двойки");
}
else
{
 System.out.println("число является степенью двойки: " + Mask.ToString());
}

Алгоритм понятен думаю а правильность кода - хз потому что с Джавой не работаю :rolleyes: Проверял на PHP - работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо:rolleyes: а перепенная б нужна для того чтоб посчитать количество итераций цикла и определить степень

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я так и подумал. Можно и счётчиком да. Хотя можно и через логарифмы например. Чтобы не использовать лишние переменные. Например через двоичный логарифм. Наверняка есть такая функция типа log2(a);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

далее. сервлеты и JSP. в хтмл форме вводится число сервлет выясняет является ли оно степенью двойки и возвращает вердикт в хтмл ответе. возник вопрос как из html запроса считать значение инт-переменной. String a=request.getParameter("value"); считывает строку.

<html>
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <title>JSP Page</title>
   </head>
   <body>
       <form action="MyServlet_1" method="POST">
       Число: <input  name="value" size="20"><br />

       <br /><br />
       <input type="submit" value="Submit">
   </form>
   </body>
</html>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А что та мнету преобразования? Оо Что-нить типа Int.Parse. Вот же 1я ссылка в Гуглеt http://www.java-forums.org/new-java/10597-...ersion-jsp.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо:blink: еще повпрос про явадок. в нетбинс 6.5.1 жму сгенерировать явадок запускается браузер с ошибкой "Firefox не может найти файл /C:/Documents and Settings/Dark_User/РњРѕРё документы/NetBeansProjects/MyServlet/dist/javadoc/index.html.",хотя он там присутсвует. браузер файрфокс. человек кот мне эти задания дает требует явадок с алгоритмами и тп.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может чё с кодировкой какой? А то в адресе /РњРѕРё документы/ какие-то кракозябры да и пробел должен escape-иться символом %20. Попробуй файл генерить не в эту папку а в путь в котором нет русского и нет пробелов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

есть проблема. в сервлете производится проверка числа на степень двойки. выделил опрацию определения в отдельную подпрограмму которая возвращает булевскую переменную в зависимости от результата. но только она не возвращается. переменная b всегда равно true что бы не ввели. алгоритм рабочий. если работу будет выполнять сервлет все работает. мне просто человек кидает задания. говорит если будеш делать какую-нибудь прогу то научишся постепенно.

сервлет:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/


import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*
* @author Dark_User
*/

public class MyServlet extends HttpServlet {

   /**
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
   protected void processRequest(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
       response.setContentType("text/html;charset=UTF-8");
       PrintWriter out = response.getWriter();
       try {
            /*TODO output your page here
           out.println("<html>");
           out.println("<head>");
           out.println("<title>Servlet MyServlet</title>");
           out.println("</head>");
           out.println("<body>");
           out.println("<h1>Servlet MyServlet at " + request.getContextPath () + "</h1>");
           out.println("</body>");
           out.println("</html>");
           */
       } finally {
           out.close();
       }
   }

   // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
   /**
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
       processRequest(request, response);
   }

   /**
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */

   @Override

   protected void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {
       PrintWriter out = response.getWriter();
       String value=request.getParameter("value");
       MathUtil util= new MathUtil();
       util.s=Integer.parseInt(value);
       boolean b=util.proverka();
       if (b=false)
           out.println("chislo ne javljaetsja stepen'ju dvojki ");
       if(b=true)
           out.println("chislo  javljaetsja stepen'ju dvojki");


       processRequest(request, response);
   }


   /**
    * Returns a short description of the servlet.
    * @return a String containing servlet description
    */
   @Override
   public String getServletInfo() {
       return "Short description";
   }// </editor-fold>

}

mathutil :

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Dark_User
*/
public class MathUtil {
   int s,b=0,Mask=1;

   boolean proverka(){
   boolean i;
       while ((s!=Mask | Mask != Mask) && (Mask < s) && (Mask > 0))
    {
       Mask = Mask << 1;
       b++;
}
    if (Mask != s)
{
i=false;
}
else
{
i=true;
}
       return i;
   }
   }


Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

что вот это значит

(пример из википедии с++)

 

   Array() : len(0), val(NULL) {}
   Array(int _len) : len(_len) {val = new double[_len];}
   Array(const Array& a);

 

что значит то, что идет после двоеточия?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
что вот это значит

(пример из википедии с++)

 

   Array() : len(0), val(NULL) {}
   Array(int _len) : len(_len) {val = new double[_len];}
   Array(const Array& a);

 

что значит то, что идет после двоеточия?

метод например выглядит так Array(int len, int val);

так вот при наследовании ты входные данные свои делаешь, например просто Array(), а чтобы передать предку то что ему необходимо используешь такую запись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
метод например выглядит так Array(int len, int val);

так вот при наследовании ты входные данные свои делаешь, например просто Array(), а чтобы передать предку то что ему необходимо используешь такую запись.

это как значение аргументов по умолчанию в функции ( Array() : len(0), val(NULL) {} )

 

и почему нельзя так сделать

 

Array::Array(int _len)

{

len = _len;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
и почему нельзя так сделать

 

Array::Array(int _len)

{

len = _len;

}

 

а вот подумай, что первое исполняется: твой код, или код предка? тут и собака зарыта. При твоей записи код предка исполняется без аргументов, а потом ты присваиваешь переменной значение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

class Array {
public:
   Array() : len(0), val(NULL) {}
   Array(int _len) : len(_len) {val = new double[_len];}
   Array(const Array& a);
   ~Array() { Free(); }
   inline double Elem(int i);
   inline void ChangeElem(int i, double x);
protected:
   void Alloc(int _len);
   void Free();
   int len;
   double* val;
};

 

вот пример полностью, здесь же нету наследования

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

йоп меня за обе ноги, я в корне не прав!!!

извиняюсь за невежество!

подобная запись инициализирует поле класса..

блин совсем с дубу рухнул старый.

 

кароче смысл в том что например:

class A{

const int i;

A(int I):i(I);
}

т.е. константу ты иначе не инициализируешь.

Второе - эфективность. Если у тебя есть поля - объекты, то при инициализации подобным образом они не будут инициализированы лишний раз. Т.е. при обычном присваивании в конструкторе объект уже перед этим был инициализирован, а при записи с отдельным инициализатором этого не происходит.

Надеюсь понятно изложил))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

nтоесть станавливается значение константы в процессе работы программы?

 

 

 

 

еще один вопрос, совсем уже запутался...

 

что это за типы?

 

LPTSTR, wchar_t, TCHAR, LPCWSTR и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

То что написано большими буквами это макросы. С буквой XXXTXXX вида

#IFDEF __UNICODE 
#DEFINE TCHAR char
#ELSE
#DEFINE TCHAR wchar_t

#DEFINE LPTSTR *TCHAR

 

wchar_t - это C тип двубайтового Unicode символа.

 

Макросы вместо имён типа позволяют писать приложение, тип работы со строками которого переключается с ANSI на UNICODE одной директивой компилятора #DEFINE __UNICODE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

опять непонятки со строками. скажем есть строка, состоящая из 5 символов - "abcde". чтоб хватило памяти, надо выделать память на 5 или 6 символов (шестой - конец строки)? и надо ли этот символ туда самому всталять(а то в конце кака-ято гадость постоянно)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В записи вида

LPTSTR s = "ABCDE"

- размер строки - 6 байт в ANSI и 12 байт в Unicode, вместе с нулевым символом, который компилятор сам подставит в конец строки в памяти. Строки с префиксом "L" (whcar_t* s = L"ABCDE"") - всегда Unicode.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В записи вида
LPTSTR s = "ABCDE"

- размер строки - 6 байт в ANSI и 12 байт в Unicode, вместе с нулевым символом, который компилятор сам подставит в конец строки в памяти. Строки с префиксом "L" (whcar_t* s = L"ABCDE"") - всегда Unicode.

я имел ввиду динамическую память под строку. скажем я выделяю 256 байт под строку, но строка получилась только 15 символов, и после этих символов идет каша

 

char* a = new char[256];

a[0] = 't';

a[1] = 'e';

a[2] = 's';

a[3] = 't';

MessageBox(0, a, "", 0);

 

и выводится что-то вроде

 

testHHHHHHHHHHHHHH...

 

надо ли в данном случае

a[4] = '/0';

 

или можно так

 

memset(a, 0, 256);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно конечно и memset(&a[4], 0, 251); но a[4] = '\0'; вполне достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

с помощью apache poi считываю данные из xls файла:

public class ExcelHelper {

   static ArrayList getInf(FileInputStream fs) throws IOException {
       ArrayList<Flat> flats = new ArrayList<Flat>();
       POIFSFileSystem poi = new POIFSFileSystem(fs);
       HSSFWorkbook wb = new HSSFWorkbook(poi);
       HSSFSheet sheet = wb.getSheet("Квартиры");
       for (short i = 1; i <= 9; i++) {
           HSSFRow row = sheet.getRow(i);
           HSSFCell cell = row.getCell((short) 0);
           String f1 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 1);
           Integer f2 = (cell == null) ? null : Integer.valueOf(cell.toString());
           cell = row.getCell((short) 2);
           String f3 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 3);
           String f4 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 4);
           String f5 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 5);
           String f6 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 6);
           String f7 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 7);
           Integer f8 = (cell == null) ? null : Integer.valueOf(cell.toString());
           cell = row.getCell((short) 8);
           Integer f9 = (cell == null) ? null : Integer.valueOf(cell.toString());
           cell = row.getCell((short) 9);
           Integer f10 = (cell == null) ? null : Integer.valueOf(cell.toString());
           cell = row.getCell((short) 10);
           String f11 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 11);
           String f12 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 12);
           String f13 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 13);
           String f14 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 14);
           String f15 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 15);
           Integer f16 = (cell == null) ? null : Integer.valueOf(cell.toString());
           cell = row.getCell((short) 16);
           Integer f17 = (cell == null) ? null : Integer.valueOf(cell.toString());
           cell = row.getCell((short) 17);
           Integer f18 = (cell == null) ? null : Integer.valueOf(cell.toString());
           cell = row.getCell((short) 18);
           String f19 = (cell == null) ? null : cell.toString();
           cell = row.getCell((short) 19);
           String f20 = (cell == null) ? null : cell.toString();
           flats.add(new Flat(f1, f2, f3, f4,
                   f5, f6, f7, f8,
                   f9, f10, f11, f12,
                   f13, f14, f15, f16,
                   f17, f18, f19, f20));
       }
       return flats;
   }
}

 

в строке

 

 Integer f2 = (cell == null) ? null : Integer.valueOf(cell.toString());

 

получаю java.lang.NumberFormatException и непонимаю почему. ячейки имеют общий формат и напрямую число вытащить нельзя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а какими функциями winAPI рисовать в окне?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

java. есть классс с полями типа стринг и дабл. нужно узнать формат поля класса и в зависимости оот результата зделать кое что еще, те

что-то вроде

if(field.getType() == (class.java.lang.String)){}if(field.getType() == (class.java.lang.Double)){}

как это зделать?

Ответ:

if (field.getType() == (Double.class))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах